[英]Spring: how do I inject an HttpServletRequest into a request-scoped bean?
[英]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.