以下的facelet代碼,當僱員inputText組件失去焦點,成功地執行這使得消息...爲什麼我的SessionScoped ManagedBean在一個地方顯示正常而在另一個地方顯示爲空?
<h:inputText id="employeeId" value="#{questionAnswerAction.questionAnswerActionForm.employeeId}"
required="true" requiredMessage="#{app:requiredFieldMessage(bundle, 'label.peoplesoftId')}"
binding="#{questionAnswerAction.questionAnswerActionForm.employeeIdInputText}">
<f:ajax event="blur" render="employeeIdMessage" />
</h:inputText>
<h:message id="employeeIdMessage" errorClass="deg-msg-error" infoClass="deg-msg-info" for="employeeId"></h:message>
出於某種原因,不過,當我嘗試應用只是另一個的facelet相同的代碼(區別在於它是用於managerId而不是employeeId),當發生了在ajax調用中觸發的setter(上述調用中的setEmployeeId
)時,我的SessionScoped ManagedProperty在方法中被標記爲null。 ManagedProperty實際上是一個SessionScoped ManagedBean本身。
想不通爲什麼這個代碼在一個頁面上工作正常,但隨後在另一facelet裏當「設置」發生ManagedProperty被顯示爲空...
不確定是否在這種特殊情況下,因爲提供的信息不在SSCCE flavor中,而是在比請求範圍更廣泛的bean上使用'binding'屬性是JSF狀態問題的配方(物理上現在,同一個組件在同一個會話中的多個請求/視圖之間共享!)。擺脫它或將其重新綁定到請求作用域bean並重試。 – BalusC
@BalusC - 該綁定屬性位於SessionScoped bean的UIInput字段中。然後將UIInput字段傳遞給一個方法,該方法將FacesContext消息添加到指定的UIComponent(在這種情況下,它是UIInput字段)。這有什麼區別嗎? –
@BalusC - 設置管理bean爲RequestScoped修復它...這很奇怪,因爲當我將我的員工託管bean設置爲SessionScoped時,ajax功能開始工作......對此背後原因的任何想法? –