【问题标题】:Why my dialogs doesn't work?为什么我的对话框不起作用?
【发布时间】:2015-10-05 19:25:55
【问题描述】:

我有一个对话框,当页面重新加载并要求登录时打开。直到我创建另一个对话框,当我单击按钮时打开该对话框。两者都有不同的名字,我打电话给正确的!真不知道怎么回事。。

现在,当我重新加载页面时,它会显示登录对话框,我输入了正确的登录名和密码,但它拒绝了。但是如果我删除另一个对话框并执行相同的操作,它就可以工作。

我的代码:

<body onload="PF('dlgLogin').show();">
        <h:form name="">
            <p:growl id="growl" sticky="true" showDetail="true" life="2000" />

            <p:dialog header="Login" widgetVar="dlgLogin" modal="true" closable="false" resizable="false">
                <h:panelGrid columns="2" cellpadding="5">
                    <h:outputLabel for="login" value="Username:" />
                    <p:inputText id="login" value="#{loginView.login}" required="true" label="Login" />
                    <h:outputLabel for="password" value="Password:" />
                    <p:password id="password" value="#{loginView.senha}" required="true" label="Password" />
                    <f:facet name="footer">
                        <p:commandButton value="Login" update="growl" action="#{loginView.login}"
                                         oncomplete="handleLoginRequest(xhr, status, args)" />
                    </f:facet> 
                </h:panelGrid>
            </p:dialog>

            <p:dialog header="Nova classificação" widgetVar="dlgClassificacao" modal="true" resizable="false">
                <h:panelGrid columns="2" cellpadding="5">
                    <h:outputLabel for="nome" value="Nome:" />
                    <p:inputText id="nome" value="#{adminView.classNome}" required="true" label="Nome" />
                    <h:outputLabel for="valor" value="Valor:" />
                    <p:inputText id="valor" value="#{adminView.classPreco}" required="true" label="Valor" />
                </h:panelGrid>
                <f:facet name="footerAdicionar">
                    <p:commandButton value="Adicionar" action="#{adminView.novaClassificacao}" />
                </f:facet>
            </p:dialog>

            <p:layout>
                <p:layoutUnit position="center">

                    <p:dataTable id="classificacoes" selection="#{adminView.selectedClassificacao}" var="classificacao" value="#{adminView.classificacoes}" style="margin-bottom:20px">

                        <p:ajax event="rowSelect" listener="#{adminView.onRowSelect}"/>

                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Nome" />
                            </f:facet>
                            <h:outputText value="#{classificacao.nome}" />
                        </p:column>

                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Valor" />
                            </f:facet>
                            <h:outputText value="#{classificacao.preco}" />
                        </p:column>
                    </p:dataTable>
                    <f:facet name="footer">
                        <p:commandButton title="Novo" icon="ui-icon-document" onclick="PF('dlgClassificacao').show();" type="button"/>
                        <p:commandButton title="Editar" icon="ui-icon-pencil" />
                        <p:commandButton title="Deletar" icon="ui-icon-trash" update="classificacoes" actionListener="#{adminView.excluirClassificacao}"/>
                    </f:facet>

                </p:layoutUnit>
            </p:layout>

        </h:form>
        <script type="text/javascript">
            function handleLoginRequest(xhr, status, args) {
                if(args.validationFailed || !args.loggedIn) {
                    PF('dlg').jq.effect("shake", {times:5}, 100);
                }
                else {
                    PF('dlg').hide();
                    $('#loginLink').fadeOut();
                }
            }
        </script>
    </body> 

【问题讨论】:

  • 控制台有错误吗? F12
  • @Geinmachi:这只是上帝形态的反模式。 Gustavo,请密切注意验证错误消息中的字段名称。
  • 没有错误。 @Geinmachi
  • @BalusC 我没有收到错误,如果我删除第二个对话框,它会正常工作!
  • 然后尝试删除第二个对话框中的内容。一旦确定,删除你发现的属性。那就是调试

标签: jsf primefaces


【解决方案1】:

问题是当您按下登录按钮时,您正在发送所有表单数据。然后您会收到消息,表明您没有(自然地)为NomeValor 字段输入任何数据。

您可以通过向您的登录对话框和表单添加一个 id 属性以及向您的登录按钮添加一个进程属性来修复它:

<p:commandButton process=":yourForm:dlgLogin" value="Login" 
    update="growl" action="#{loginView.login}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-30
    • 2022-09-27
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多