我有一個由兩個JSP組成的JSF應用程序:login.jsp & main.jsp。更新模型值之前JSF commandLink操作正在啓動
我有以下faces-config.xml中:
<lifecycle>
<phase-listener>package.programs.scorecard.beans.EventBean</phase-listener>
</lifecycle>
<managed-bean>
<managed-bean-name>FormBean</managed-bean-name>
<managed-bean-class>package.programs.scorecard.beans.FormBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>DataBean</managed-bean-name>
<managed-bean-class>package.programs.scorecard.beans.DataBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>EventBean</managed-bean-name>
<managed-bean-class>package.programs.scorecard.beans.EventBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
而下面的web.xml:
<welcome-file-list>
<welcome-file>faces/login.jsp</welcome-file>
<welcome-file>faces/index.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
我對中的login.jsp該公司Databeans更新屬性一對夫婦組件在commandLink上單擊。成功完成後,用戶將導航到/main.jsp。
我注意到當我點擊commandLink時,該方法在bean更新之前執行。這會導致在執行方法時我的所有bean屬性都爲null,因爲我的表單中的值沒有被應用到bean。
根據我對JSF生命週期的理解,除非指定「immediate = true」,否則應始終在「調用應用程序」之前執行「更新模型值」,它不適用於我的commandLink。
我一直在試圖調試這個幾個小時今天上午,我歡迎任何建議或見解。
UPDATE: 我已經徹底調查這一問題,並得出結論,下拉我利用組件中有一個錯誤,應固定在下一版本中。我的解決方案是使用定期H:selectOneMenu用於代替第三方組件,它就像一個魅力:
<h:selectOneMenu id="ddlManager" value="#{DataBean.managerId}">
<f:selectItems value="#{DataBean.managerList}" />
</h:selectOneMenu>
哪裏managerList是的SelectItem對象的列表。
您能否提供更多解釋。您是否說在調用phaselistener之前,命令鏈接的pagecode方法正在執行?你的phaselistener中是否有任何可能阻止它被調用的邏輯? – BoboTheCodeMonkey 2008-11-04 18:08:14