0

我尝试做一些与这个 Richfaces示例非常相似的事情。如果您没有选择其中一个预定义的,我有一个描述自定义 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>

问题是,当在重新渲染时(在禁用的 EL 上)isPredefinedValidator()调用该方法时a4j,我收到 NPE。

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

当我尝试调试时 - 结果发现从 设置的值selectOneMenu是空的。

这是否意味着reRender变量的设置值是异步发生的,并且存在竞争条件?这种情况的正确解决方案是什么?

4

1 回答 1

0

rich:modalPanel包含h:selectOneMenu解决此问题的一些黑魔法配置。它是这样的<rich:modalPanel ... domElementAttachment="form">

于 2013-02-11T08:05:30.587 回答