试图理解h:commandLink通过验证和a4j提交的原因:commandLink没有

时间:2011-03-15 13:36:48

标签: jsf

首先,我正在使用Jsf 1.2 ......

我在将表单中的某些值提交到验证时遇到问题。 特别是这段代码:

<h:panelGrid columns="4" id="StatusPanel">
    <h:outputText value="#{msg.Phone_number_to_send_SMS_to}" />
    <h:inputText id="phoneNumber" value="#{general.smsPhoneNumber}" required="true"
        requiredMessage="Please enter a valid phone number." />
    <a4j:commandLink value="#{msg.Submit_Button}"
        reRender="pinCodeDeliveryMsgText, pinCodeDeliveryMsg, pinCodeDeliveryFailedMsg, pinCodeDeliveryMainPanel, LastPinCodeMsg, SendingSMSMSG"
        action="#{general.submit}" />
        <h:message for="phoneNumber" fatalClass="mandatoryFieldMissing" errorClass="mandatoryFieldMissing" tooltip="true" />
</h:panelGrid>

在html页面中看起来像这样:

每当我按下提交链接时,页面都没有真正通过验证,它似乎与最后的成功值相反。结果是,如果电话号码字段留空,它什么都不做,甚至不呈现<h:message>标签。

实际上,我有一个解决方法修复,如下所示:

<h:commandLink value="#{msg.Submit_Button}">
    <a4j:support event="onclick" reRender="pinCodeDeliveryMsgText, pinCodeDeliveryMsg, pinCodeDeliveryFailedMsg, pinCodeDeliveryMainPanel, LastPinCodeMsg, SendingSMSMSG"
    action="#{general.submit}"/>
</h:commandLink>

但我真的很想知道a4j:commandLinkh:commandLink之间的区别是什么让一个woirk而另一个没有。

TNX

1 个答案:

答案 0 :(得分:1)

您是否尝试将a4j:commandLink的process属性设置为inputText的id?看起来您只是触发了某些组件的重新渲染,因此根本不会执行任何模型更新。