<f:ajax>在第二次运行时不更新模型值?</f:ajax>

时间:2011-09-03 03:06:06

标签: jsf jsf-2 richfaces

我在JSF 2.0页面中有以下内容:

<rich:column styleClass="tbl-weight" id="weight">
                        <f:facet name="header">
                            <h:outputText value="Weight" />
                        </f:facet>

                        <h:outputLabel value="lbs" for="lbs" />
                        <h:inputText size="3" id="lbs" label="lbs"
                            validatorMessage="Lbs must be from 0 to 999"
                            value="#{weighFamilyBacking.weightDecoratorMap[child].lbs}">
                            <f:validateLongRange minimum="0" maximum="999" />
                            <f:ajax event="change" render="@form" immediate="true"/>
                        </h:inputText>

                        <h:outputLabel value="oz" for="oz" />
                        <h:inputText size="3" id="oz" label="oz"
                            validatorMessage="Oz must be from 1 to 15"
                            value="#{weighFamilyBacking.weightDecoratorMap[child].oz}">
                            <f:validateLongRange minimum="0" maximum="15" />
                            <f:ajax event="change" render="currentPayoutOutput" />
                        </h:inputText>

                        <h:message styleClass="error" for="lbs" />
                        <h:message styleClass="error" for="oz" />
                    </rich:column>


                    <rich:column styleClass="tbl-payout" id="currentPayout">
                        <f:facet name="header">
                            <h:outputText id="payout" value="Payout" />
                        </f:facet>
                        <h:outputText id="currentPayoutOutput"
                            value="#{weighFamilyBacking.weightDecoratorMap[child].payout}" />
                    </rich:column>

在查看此时,“lbs”和“oz”输入上的f:ajax应更新设置其值,然后使currentPayoutOutput呈现。这仅适用于对输入字段的第一次更改。

如果我使用@form或使用currentPayoutOutput,这是相同的结果。使用阶段监听器,我看到它从processValidations权限跳转到renderResponse。没有验证者消息出现。

1 个答案:

答案 0 :(得分:1)

问题最终出现如下:

<f:metadata>
    <f:viewParam name="familyId" value="#{weighFamilyBacking.familyId}" required="true"></f:viewParam>
    <f:event type="preRenderView"
        listener="#{weighFamilyBacking.loadFamily}" />
</f:metadata>

此页面将familyId作为参数,并指定为必需。一旦我删除了这些东西按预期工作。我假设因为参数最初是在第一次工作。然后在后续帖子中,familyId参数不再存在(因为它不是隐藏的表单字段),因此我从验证权限跳转到渲染阶段,因为所需的“viewParam”验证失败了。