我有一个简单的JSF-Page,并希望将参数从page1传递给page2。 每个页面都有自己的控制器,在请求范围内。
两个控制器看起来像这样: 控制器1:
@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在这里不起作用。我怎样才能做到这一点?
答案 0 :(得分:0)
试试这个:
<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请求范围获取条目 - 不完全是你想要的。