簡體   English   中英

如何在請求范圍的控制器之間傳遞參數?

[英]How to pass parameters between Request-Scoped Controllers?

我有一個簡單的 JSF 頁面,想將參數從 page1 傳遞到 page2。 每個頁面都有自己的 controller 請求 scope。

兩個控制器如下所示: Controller1:

@Component("requestController1")
@Scope("request")
public class RequestController1 {

private List<Product> products;
private Product selectedProduct;

@PostConstruct
public void init() {
       //load products from db
}

public void setProducts(List<Product> products) {
    this.products = products;
}

public List<Product> getProducts() {
    return products;
}

public void setSelectedProduct(Product selectedProduct) {
    this.selectedProduct = selectedProduct;
}

public Product getSelectedProduct() {
    return selectedProduct;
}

控制器2:

@Component("requestController2")
@Scope("request")
public class RequestController2 {

private Long selectedProductId;

    @PostConstruct
public void init() {
selectedProductId = (Long) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("selectedProductId");
}

    public void setSelectedProductId(Long selectedProductId) {
    this.selectedProductId = selectedProductId;
}

public Long getSelectedProductId() {
    return selectedProductId;
}
}

現在我想通過將 selectedProductId 傳遞給 controller2 從 page1 導航到 page2。 請注意,兩個控制器都在請求范圍內,我想使用 commandButton 進行導航。

<h:commandButton value="Continue" action="requestParam2.jsf?faces-redirect=true">
                <f:param name="selectedProductId" value="#{requestController1.selectedProduct.id}"></f:param>
            </h:commandButton>

似乎 f:param 在這里不起作用。 我怎樣才能做到這一點?

試試這個: <h:commandButton value="Continue" action="requestParam2.jsf?faces-redirect=true&selectedProductId=#{requestController1.selectedProduct.id}"/>

在 JSF1 h:commandButton 中不支持 f:param 標簽 - 如果我沒記錯的話。 您始終可以使用h:commandLink並使用一些 CSS 樣式。

此外,您需要調用 getRequestParameterMap() 來讀取請求參數。 getRequestMap() 從 servlet 請求 scope 中獲取條目 - 不完全是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM