2011-12-15 97 views
0

試圖構建一個簡單的JSF應用程序。我不明白的是,用什麼機制來觸發頁面重新加載。我曾嘗試以下瞭解JSF中的導航

<h:selectOneMenu 
    id="ChallengesListBox" 
    onchange="submit()" 
    valueChangeListener="#{bean.projectselected}"> 
    <f:selectItems value="#{bean.projectnames}"/> 
</h:selectOneMenu> 

<h:commandButton value="submit" action="#{bean.submit}" /> 

public String submit() { 
    this.description.setRendered(true); 
    return null; 
} 

但這並沒有影響。豆的方法

public String submit() 

保持未被觸動,因爲我可以在調試模式下看到。

回答

0

這與導航無關。爲什麼不調用bean操作方法有很多原因。你可以找到他們都在這個答案:commandButton/commandLink/ajax action/listener method not invoked or input value not updated

我suspest,你已經要麼根本就沒有<h:form>,或者說你在表格(第一個將被定位submit()調用)多個按鈕,或按鈕在表單提交處理期間本身不是rendered


無關的具體問題,這JSF 1.x的風格的做法是非常笨拙。正如你顯然已經在JSF 2.x中,我建議以下更簡單的方法:

<h:selectOneMenu value="#{bean.projectname}"> 
    <f:selectItems value="#{bean.projectnames}" /> 
    <f:ajax render="somepanel" /> 
</h:selectOneMenu> 
<h:panelGroup id="somepanel"> 
    <h:outputText value="#{bean.description}" rendered="#{not empty bean.projectname}" /> 
</h:panelGroup> 

(這將使#{bean.description}值每當#{bean.projectname}不爲空/空根據下降的選擇下拉列表)

並確保您將所有binding屬性移除到輔助bean。無論何時只要您在<h:panelGroup id="somepanel">內部有輸入/按鈕組件,也要確保豆子是@ViewScoped