【问题标题】:JSF 2 AJAX Unwanted Render to Two FormsJSF 2 AJAX 不需要的呈现为两种形式
【发布时间】:2012-08-31 09:52:37
【问题描述】:

所以这与经常被问到的“如何将消息呈现到多个表单”相反。我在一页上有两个表单,在一个表单中验证后,摘要错误(如果验证失败)显示在提交按钮下方的两个表单上。如果代码成功发送所需的电子邮件,则确认消息也会以两种形式显示。它们应该只显示在提交的表单中。 inputTexts 下面的消息可以正常工作。我做错了什么?

<p:panel>
    <h:form id="id_rememberUserNameForm" prependId="false">
                <td>
...
                    <p:inputText 
                        id="id_existingEmailAddress"
                        styleClass="registerinputtext width_20em"
                        size="20" 
                        maxlength="60" 
                        value="#{credentialsManagementBean.emailAddress}"
                        validator="#{multivalidator.validateEmailExists}" >
                        <f:ajax event="blur" render="id_noSuchEmailError" />
                    </p:inputText>
                </td>
            </tr>
            <!-- validation error handling +++++++++++++++++ -->
            <tr class="errorMessage min_height_1p5em">
                <td colspan="2" >
                    <h:message for="id_existingEmailAddress" 
                                id="id_noSuchEmailError" 
                                showDetail="false" 
                                showSummary="true"/>
                </td>
            </tr>
        </table>
        <p:commandButton id="id_remindUsernameButton" 
                            value="Retrieve Username" 
                            action="#{credentialsManagementBean.rememberUsername}" >
            <f:ajax execute="id_rememberUserNameForm" render="id_UserReminderMessage" />
        </p:commandButton>
        <p:messages id="id_UserReminderMessage" 
                            showSummary="false"
                            showDetail="true"
                            autoUpdate="true" />

    </h:form>
</p:panel>

<!-- next form +++++++++++++++++ -->

<p:panel>
    <h:form id="id_resetPasswordForm" prependId="false">
...
                    <p:inputText 
                        id="id_existingUsername"
                        styleClass="registerinputtext width_20em"
                        size="20" 
                        maxlength="20" 
                        value="#{credentialsManagementBean.username}"
                        validator="#{multivalidator.validateUsernameExists}">
                        <f:ajax event="blur" render="id_noSuchUserError" />
                    </p:inputText>
                </td>
            </tr>
            <!-- validation error handling +++++++++++++++++ -->
            <tr class="errorMessage min_height_1p5em">
                <td colspan="2" >
                    <h:message for="id_existingUsername" 
                                id="id_noSuchUserError" 
                                showDetail="true" 
                                showSummary="false"/>
                </td>
            </tr>
        </table>
        <p:commandButton id="id_resetPasswordButton" 
                            value="Retrieve Username" 
                            action="#{credentialsManagementBean.resetPassword}" >
            <f:ajax execute="id_resetPasswordForm" render="id_pwResetMessage" />
        </p:commandButton>
        <p:messages id="id_pwResetMessage" 
                            showSummary="true"
                            showDetail="false"
                            autoUpdate="true" />
    </h:form>
</p:panel>

【问题讨论】:

    标签: ajax jsf-2


    【解决方案1】:

    &lt;p:commandButton&gt; 上使用更新看起来很有效。所以试试这个:

    <p:commandButton id="id_remindUsernameButton" value="Retrieve Username" 
       action="#{credentialsManagementBean.rememberUsername}" update="id_UserReminderMessage" process="@form">
    </p:commandButton>
    

    因为&lt;p:commandButton&gt;默认是ajax提交,你不需要&lt;f:ajax&gt;

    【讨论】:

    • 相反,它完全停止出现。 grrr :)
    • 也不走运。在接下来的几周里,我将删除每个表单底部的消息,因为每个字段下方的错误都有效,应该足够好了。我现在只是将成功的结果转发到成功页面。反正可能更好。如果可以的话,我只会在只有一种表格的页面上使用这些消息。我认为,如果你知道怎么做,这很容易,但如果你不知道,那就太复杂了。框架,不能没有它们,不能和它们一起生活。 :/ 谢谢您的帮助。你至少让它停止出现两次。 :) 我给了帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多