2011-07-15 81 views
0

我有一個簡單的JSF頁面,並希望將參數從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; 
} 
} 

現在我想從第1頁導航與傳遞selectedProductId到控制器2到第2頁。請注意,這兩個控制器都在請求範圍內,我想使用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

試試這個: <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請求範圍獲取條目 - 不完全是你想要的。

+0

我在這裏使用JSF 2.0。 h:commandButton是否仍然不支持f:param? – flash

相關問題