0

データテーブルからprimefacesモーダルボックスに埋め込まれたフォームに属性をロードして更新してみてください:

1) ユーザーのデータをモーダルに送信する datatable コマンド

<p:commandButton value="alterar"
                        action="#{usuarioMB.carregarAlteracao(u)}" update=":usuarioDesc"
                        process="@this" onclick="dlg.show();" />

2)モーダルボックスにユーザーの属性をうまくロードします

<p:dialog id="modalDialog" header="Alterar Usuário" widgetVar="dlg"
            modal="true" height="260" appendToBody="true" dynamic="true" >
            <h:form id="usuarioDesc" styleClass="formTamanho">
                <h:panelGrid id="#{msg.pnlIdProfile}" columns="2"
                    columnClasses="labelPanelGrid, contentPanelgrid">
                    <p:outputLabel value="Perfil:" />
                    <p:outputLabel value="#{usuarioMB.usuario.perfil.nome}" />
                </h:panelGrid>

                <h:panelGrid id="#{msg.pnlIdLogin}" columns="2"
                    columnClasses="labelPanelGrid, contentPanelgrid">
                    <p:outputLabel value="#{msg.lblLogin}" for="usuario_login" />
                    <p:inputText value="#{usuarioMB.usuario.login}" id="usuario_login"
                        required="true" requiredMessage="#{msg.msgReqLogin}" />
                </h:panelGrid>

                <h:panelGrid id="nomeUsuario" columns="2"
                    columnClasses="labelPanelGrid, contentPanelgrid">
                    <p:outputLabel value="Nome:" for="usuario_nome" />
                    <p:inputText value="#{usuarioMB.usuario.nome}" id="usuario_nome"
                        required="true" />
                </h:panelGrid>

                <h:panelGrid id="emailUsuario" columns="2"
                    columnClasses="labelPanelGrid, contentPanelgrid">
                    <p:outputLabel value="Email:" for="usuario_email" />
                    <p:inputText value="#{usuarioMB.usuario.email}" id="usuario_email"
                        required="false" />
                </h:panelGrid>


                <h:panelGrid id="#{msg.pnlIdCal}" columns="3"
                    columnClasses="labelPanelGrid, contentPanelgrid">
                    <p:outputLabel value="#{msg.lblBirth}" for="#{msg.calId}" />
                    <p:calendar value="#{usuarioMB.usuario.nascimento}"
                        id="#{msg.calId}" locale="#{msg.calLocale}" showButtonPanel="true"
                        navigator="true" />
                    <p:outputLabel value="(Ex: 16-04-1980)" />
                </h:panelGrid>
                <br />
                <div id="btnForms" style="margin-left: 120px;">
                    <p:commandButton value="Alterar Usuário" id="alt_usuario"
                        action="#{usuarioMB.alterar()}" update=":usuarioDataTable:tableUsuarios"
                        process="@this" style="margin-left:5px;" oncomplete="dlg.hide();"/>

                    <p:commandButton value="Criar nova senha e mandar por email"
                        id="alt_senha"
                        action="#{usuarioMB.sendEmail(usuario.email)}"
                        process="@this"
                        style="margin-left:5px;" />
                    <p:commandButton value="Cancelar" onclick="dlg.hide();"
                        style="margin-left:5px;" />
                </div>
            </h:form>
        </p:dialog>

3) モーダルのフィールドを使用して属性を変更し、コマンド アクション "alterar" を使用すると、マネージド Bean はユーザーの元のデータへの参照を保持し、更新は行われません。

public String alterar() {

        try {
            gerenciarUsuarioBean.alterar(usuario);
            JSFMessageUtil.sendInfoMessageToUser("Usuário salvado com sucesso!");

        } catch (DaoExcecao e) {
            LOG.error(e);
            JSFMessageUtil.sendErrorMessageToUser("Erro cadastrando usuário !");
        }
        usuario = new Usuario();
        return "/views/gerencia/gerenciarUsuarios.xhtml";
    }

簡単に言えば、ユーザーの属性はデータベースに自動的にマージされます。どんな助けでも大歓迎です..

4

1 に答える 1

0

わかりました、コマンド ボタン (処理 / 更新) に少し混乱がありました

1) データテーブルコマンド:

<p:commandButton value="alterar"
                            action="#{usuarioMB.carregarAlteracao(u)}" update=":usuarioDesc:usr"
                            process="@this" onclick="dlg.show();" />

2) 更新ボタン

<p:commandButton value="Alterar Usuário" id="alt_usuario"
                            action="#{usuarioMB.alterar()}"
                            update=":usuarioDataTable:tableUsuarios" process="@form"
                            style="margin-left:5px;" oncomplete="dlg.hide();" />

それが誰かを助けることを願っています。

于 2013-07-19T23:43:09.660 に答える