转发变量在下一页

时间:2013-06-27 13:41:00

标签: java jsf primefaces

我有一个Users表。添加,查看和删除工作。但是我有编辑的问题。

我的列表页面:

    <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仅用于导航。

2 个答案:

答案 0 :(得分:1)

您可以考虑Przemek的答案,也可以使用将参数传递给辅助bean的4种方法之一。 1.方法表达 2. f:param 3. f:属性 4. f:setPropertyActionListener

有关详细解释的完整说明,请参阅this

这个例子很容易理解。看看并选择适合您需求的产品。

或者简单地说:

在实际的托管bean中......

public String navigationButtonListener(User parameter) {
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap()
            .put("parameterAttribute", parameter);
    return "my-destination-page";
}

在目标托管bean中...

@PostConstruct
public void init(){
    myAttribute= (User) FacesContext.getCurrentInstance()
    .getExternalContext().getRequestMap().get("parameterAttribute");

}

祝你好运!

答案 1 :(得分: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

重新加载要编辑的用户