2014-11-06 38 views
2

我正在使用JSF2和PrimeFaces。我如何編寫selectOneMenu來調用JSF導航,以便在菜單中更改選項時將用戶重定向到同一頁面,但使用不同的參數? 我只需要改變顏色。JSF/PrimeFaces selectOneMenu更改url參數並重定向

從以下網址:

<f:metadata> 
     <f:viewParam name="vehicle" value="#{myViewController.vehicle}"/> 
     <f:viewParam name="vehicle" value="#{myViewController.color}"/> 
    </f:metadata> 

MyView.xhtml:(沒有工作)

<h:form id="selectOneMenuEdition"> 
    <p:selectOneMenu id="selectOneMenuHeader" 
        value="#{selectOneMenuHeader.outcome}" > 
     <f:selectItem itemValue="viewVehicles.xhtml?vehicle=#{myViewController.vehicle}&amp;color=red" itemLabel="Vehicle red " /> 
     <f:selectItem itemValue="viewVehicles.xhtml?vehicle=#{myViewController.vehicle}&amp;color=blue" itemLabel="Vehicle blue" /> 
     <p:ajax event="change" listener="#{selectOneMenuHeader.navigate}" /> 
    </p:selectOneMenu> 
    </h:form> 

ManagedBean:

private String outcome; 

public void navigate() throws IOException { 
    FacesContext.getCurrentInstance().getExternalContext().redirect(outcome); 
} 
+0

如果你'outcome',你的意思是一個JSF導航的結果嗎?或者一個URL? – kolossus 2014-11-06 17:09:37

+0

mmm ...是的,也許這個例子是錯誤的。我不知道這樣做的正確方法是什麼 – xav56883728 2014-11-06 17:22:43

+0

這並沒有真正回答我的問題:「結果」變量;這是一個JSF導航結果或完整的URL? – kolossus 2014-11-06 18:45:41

回答

2

<p:selectOneMenu>勢必selectOneMenuHeader.outcome,所以你只需要在你的bean中獲得它的價值。

然後,您可以創建自己的URL來重定向用戶所需的參數。

實施例(豆):

public void navigate() throws IOException { 
    String url = "yourPage.jsf?color=" + outcome; 
    FacesContext.getCurrentInstance().getExternalContext().redirect(url); 
} 

第二種解決方案是添加Javascript onchange事件通過取當前選定的選項將用戶重定向。

例(香草JS):

onchange="document.location.href='yourPage' + this.options[this.selectedIndex].value;"