繁体   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