2013-02-10 72 views
0

我嘗試執行一些與thisrichfaces示例非常相似的操作。如果您沒有選擇預定義ID之一,我有一個描述自定義ID驗證的表單,否則表單將被禁用。所以對於模板件殘疾人表達式將轉到下一個方法:selectOneMenu在更改後將字段設置爲空

public boolean isPredefinedValidator() { 
    return !currentProjectRegField.getIdValidation().getIdType().equals(IdValidatorType.NONE); 
} 

被調用是這樣的:

disabled="#{accountHome.isPredefinedValidator()}" 

,這裏是爲預定義的驗證選擇:

<h:selectOneMenu value="#{accountHome.currentProjectRegField.idValidation.idType}" 
    rendered="#{!(empty accountHome.currentProjectRegField or empty accountHome.currentProjectRegField.idValidation)}"> 
    <a4j:support event="onchange" reRender="customIdValidator"/> 
     <s:convertEnum /> 
      <s:enumItem enumValue="NONE" label="#{messages['IdValidatorType_enum.NONE']}"/> 
      <s:enumItem enumValue="USA_ID" label="#{messages['IdValidatorType_enum.USA_ID']}"/> 
      <s:enumItem enumValue="MEXICO_ID" label="#{messages['IdValidatorType_enum.MEXICO_ID']}"/> 
</h:selectOneMenu> 

問題是,當在a4j rerender上調用方法isPredefinedValidator()(在禁用的EL上)時,我收到NPE。

Caused by: java.lang.NullPointerException 
at com.whatever.something.action.AccountHome.isPredefinedValidator(AccountHome.java) 

,當我嘗試調試 - 原來,已經從selectOneMenu設置的值是零。

這是否意味着reRender和變量的設置值發生異步,並且存在競爭條件?這種情況下的正確解決方案是什麼?

+0

確保屬性'currentProjectRegField'及其內部屬性'idValidation'在託管bean創建時初始化,否則您將面臨此NPE錯誤。 – 2013-02-10 17:29:03

回答

0

rich:modalPanel中的一些黑魔法配置包含h:selectOneMenu解決了此問題。它是這樣的<rich:modalPanel ... domElementAttachment="form">

相關問題