0

ユーザーテーブルがあります。作品の追加、閲覧、削除。しかし、編集に問題があります。

マイ リスト ページ:

    <h:form id="form">
        <p:dataTable styleClass="table" value="#{userMB.allAdmins}" var="admin" paginator="true" rows="15" rowKey="#{admin.id}" selection="#{userMB.user}" selectionMode="single">
            <f:facet name="header">
                Lista administratorów
            </f:facet>

            <p:column headerText="#{msg.firstName}">
                <h:outputText value="#{admin.firstName}" />
            </p:column>

            <p:column headerText="#{msg.lastName}">
                <h:outputText value="#{admin.lastName}" />
            </p:column>

            <p:column headerText="#{msg.personalId}">
                <h:outputText value="#{admin.personalId}" />
            </p:column>

            <f:facet name="footer">
                <p:commandButton id="viewButton" value="#{msg.info}" icon="ui-icon-search"  
                                 update=":form:display" oncomplete="userDialog.show()"/>
                <p:commandButton action="#{userMB.createStart()}" value="#{msg.add}" icon="ui-icon-plus" />
                <p:commandButton action="#{userMB.editStart()}" value="#{msg.edit}" >
                    <f:setPropertyActionListener target="#{userMB.user}" value="#{userMB.user}" />
                </p:commandButton>
                <p:commandButton action="#{userMB.deleteUser()}" value="#{msg.delete}" icon="ui-icon-close"/>
            </f:facet>
        </p:dataTable>

        <p:dialog id="dialog" header="Administrator" widgetVar="userDialog" resizable="false"
                  width="300" showEffect="clip" hideEffect="explode">

            <h:panelGrid id="display" columns="2" cellpadding="4">

                <f:facet name="header">
                    <p:graphicImage value="./../../images/person4.png" width="150" height="150"/>
                </f:facet>

                <h:outputText value="#{msg.firstName}" />
                <h:outputText value="#{userMB.user.firstName}" />

                <h:outputText value="#{msg.lastName}" />
                <h:outputText value="#{userMB.user.lastName}" />

                <h:outputText value="#{msg.personalId}" />
                <h:outputText value="#{userMB.user.personalId}" />

            </h:panelGrid>
        </p:dialog>

    </h:form>

次のページで選択したユーザーを送信したい: aciontListener を使用します。

                <p:commandButton action="#{userMB.editStart()}" value="#{msg.edit}" >
                    <f:setPropertyActionListener target="#{userMB.user}" value="#{userMB.user}" />
                </p:commandButton>

ユーザーを送りたい私の編集ページ:

        <h:form>
            <div id="userPanel">
                <h:inputHidden value="#{userMB.user}" />
                <p:panel id="panelUser" header="Edytuj administratora" >
                    <div id="panelImage">
                        <img src="./../../images/person4.png" alt="person" width="150px" height="130px"/>
                    </div>
                    <h:panelGrid columns="3">
                        <p:outputLabel for="firstName" value="#{msg.firstName}"></p:outputLabel>
                        <p:inputText id="firstName" value="#{userMB.user.firstName}" label="#{msg.firstName}" required="true">
                            <f:validator validatorId="nameValidator" />  
                            <p:ajax update="msgFristName" event="keyup" />  
                        </p:inputText>  
                        <p:message for="firstName" id="msgFristName"/> 

                        <p:outputLabel for="lastName" value="#{msg.lastName}"></p:outputLabel>
                        <p:inputText id="lastName" value="#{userMB.user.lastName}" label="#{msg.lastName}" required="true">
                            <f:validator validatorId="nameValidator" />   
                            <p:ajax update="msgLastName" event="keyup" /> 
                        </p:inputText>  
                        <p:message for="lastName" id="msgLastName"/> 

                        <p:outputLabel for="personalId" value="#{msg.personalId}"></p:outputLabel>
                        <p:inputText id="personalId" value="#{userMB.user.personalId}" label="#{msg.personalId}" required="true">
                            <f:validator validatorId="personalIdValidator" />   
                            <p:ajax update="msgPersonalId" event="keyup" /> 
                        </p:inputText>  
                        <p:message for="personalId" id="msgPersonalId"/>

                        <p:outputLabel for="password" value="#{msg.password}"></p:outputLabel>

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

追加しました:<h:inputHidden value="#{userMB.user}" />しかし、データユーザーは表示されず、空のフィールドのみが表示されます。この人を送るにはどうしたらいいですか?私はこの方法を他のプロジェクトで一度使用しましたが、プライムフェイスなしでは少し異なり、うまくいきました。なぜ今はうまくいかないのですか?

メソッド editStart:

public String editStart() {
    return "editStart";
}

顔構成:

<navigation-case>
    <from-outcome>editStart</from-outcome>
    <to-view-id>/protected/admin/adminEdit.xhtml</to-view-id>
    <redirect/>
</navigation-case>

adminEdit 側にいるときは、プールを編集して editUser メソッドを実行します。

public String editUser() {
    FacesContext context = FacesContext.getCurrentInstance();
    Map requestParameterMap = (Map) context.getExternalContext().getRequestParameterMap();
    try {
        String userRole = requestParameterMap.get("userRole").toString();
        String active = requestParameterMap.get("active").toString();
        Boolean act = Boolean.parseBoolean(active);
        user.setRole(userRole);
        user.setActive(act);
        userDao.update(user);
    } catch (EJBException e) {
        sendErrorMessageToUser("Edit error");
        return null;
    }
    sendInfoMessageToUser("Account edited");
    return user.getRole() + "List";
}

私のメソッド editStart は、ナビゲーションにのみ使用されます。

4

2 に答える 2

0

セッションを通じてユーザー ID を渡すことができます。

commandLink にパラメーターを追加する

<p:commandButton action="#{userMB.editStart()}" value="#{msg.edit}>
    <f:param name="userId" value="#{userMB.user.id}" />
</p:commandButton>

バッキングBeanでこれを行います

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest myRequest = (HttpServletRequest)context.getExternalContext().getRequest();
HttpSession mySession = myRequest.getSession(); 
Integer userId = Integer.parseInt(myRequest.getParameter("userId"));

その後、取得したIDで編集したいユーザーをリロードできます

于 2013-06-27T14:39:25.337 に答える