0

この リッチフェイスの例と非常によく似た何かをしようとしています。定義済みのもののいずれかを選択していない場合に備えて、カスタム ID 検証を説明するフォームがあります。それ以外の場合、フォームは無効になります。したがって、フォーム メンバーの無効な式は次のメソッドに移動します。

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>

問題は、メソッドisPredefinedValidator()が再レンダリング (無効な EL) で呼び出されるa4jと、NPE を受け取ることです。

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

そして、デバッグしようとすると、から設定された値selectOneMenuがnullであることがわかります。

reRender変数への値の設定が非同期に行われ、競合状態が発生するということですか? そして、この場合の正しい解決策は何ですか?

4

1 に答える 1

0

rich:modalPanelに含まれるいくつかの黒魔術構成は、h:selectOneMenuこの問題を解決しました。こんなふうになります<rich:modalPanel ... domElementAttachment="form">

于 2013-02-11T08:05:30.587 に答える