Primefaces 2 <h:form> 和 2<p:message>混淆



我的登录页面有 2 个表单,一个用于登录本身,另一个用于创建新用户,它们位于选项卡视图 (p:tabView) 中,因此用户永远不会在页面上看到两者,它将是一个或另一个。问题是,每次在登录选项卡上进行评估失败时,失败也会显示在新用户选项卡中,反之亦然。如何处理?我尝试在按钮命令中设置更新属性,但它不起作用

请参阅下面的代码:

<p:tabView id="loginTabView" orientation="right" style="margin-bottom:20px" styleClass="login_fields_panel">
        <p:tab title="Acesso" id="acessoTab" >
            <h:form>
                <h3><h:outputText value="#{bundle.loginHello}"  escape="false"/></h3>
                <p:messages id="messages_login" showDetail="false" autoUpdate="true" closable="true" showIcon="true"/>
                <p:outputLabel for="email" value="#{bundle.label_email}"/>
                <p:inputText value="#{loginMB.email}" label="#{bundle.label_email}" id="email" required="true" validatorMessage="#{bundle.emailInvalido}" size="45">
                    <f:validateRegex pattern="^[w-.]+@([w-]+.)+[w-]{2,4}$" for="email"  />
                </p:inputText>
                <br/>
                <p:outputLabel for="senha" value="#{bundle.label_password}"  />
                <p:password value="#{loginMB.password}" id="senha" label="#{bundle.label_password}" required="true" size="45"/>
                <br/><br/>
                <p:commandButton action="#{loginMB.login}" value="#{bundle.btn_login}" ajax="false" update="messages_login"/>
            </h:form>
        </p:tab>
        <p:tab title="Faça seu cadastro aqui" id="newUserPanel" >
            <h:form id="formNewUser">
                <h3><h:outputText value="#{bundle.loginHello}"  escape="false"/></h3>
                <p:messages id="messages_new" showDetail="false" autoUpdate="true" closable="true" showIcon="true" />
                <h:panelGrid columns="2" id="matchGrid" cellpadding="1">
                    <p:outputLabel for="email" value="#{bundle.label_name}: "/>
                    <p:inputText value="#{loginMB.email}" label="#{bundle.label_name}:" id="name" required="true" validatorMessage="#{bundle.emailInvalido}" size="45" maxlength="100">
                    </p:inputText>
                    <p:outputLabel for="email" value="#{bundle.label_email}: "/>
                    <p:inputText value="#{loginMB.email}" label="#{bundle.label_email}" id="email" required="true" validatorMessage="#{bundle.emailInvalido}" size="45">
                        <f:validateRegex pattern="^[w-.]+@([w-]+.)+[w-]{2,4}$" for="email"  />
                    </p:inputText>
                    <p:outputLabel for="senha" value="#{bundle.label_password}"  />
                    <p:password value="#{loginMB.password}" id="senha" label="#{bundle.label_password}" required="true" size="45"/>
                    <p:outputLabel for="senhaConfirmacao" value="#{bundle.label_password_confirmacao}"  />
                    <p:password value="#{loginMB.password}" id="senhaConfirmacao" label="#{bundle.label_password_confirmacao}" required="true" size="45"/>
                    <p:outputLabel for="birthday" value="#{bundle.label_birthday}"  />
                    <p:calendar id="birthday" value="#{calendarView.date2}" required="true" size="45" pattern="dd/MM/yyyy"/>
                </h:panelGrid>
                <br/><br/>
                <p:commandButton id="btn_create" action="#{loginMB.createUser}" value="#{bundle.btn_criar_usuario}" ajax="true" update="messages_new"/>
            </h:form>
        </p:tab>

谢谢

所描述的两个表单和两个消息组件的问题实际上是双重的:

  1. 您正在这些消息组件上使用autoUpdate="true"。因此,无论您在 update 属性中指定什么,这些消息组件都将自动更新。

    您需要从消息组件中删除autoUpdate="true",或向命令组件添加ignoreAutoUpdate="true"


  2. 您在第一个按钮上使用ajax="false"。这将强制重新加载整个页面。请注意,在这种情况下,所有与 ajax 相关的属性(如 processupdate)都将被忽略

    您需要在第一个按钮上重新启用 ajax,或者向第二个消息组件添加redisplay="false"

相关内容

  • 没有找到相关文章

最新更新