Java 下一页的Forward变量

Java 下一页的Forward变量,java,jsf,primefaces,Java,Jsf,Primefaces,我有一张用户表。添加、查看和删除工作。但我有编辑的问题 我的列表页: <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">

我有一张用户表。添加、查看和删除工作。但我有编辑的问题

我的列表页:

    <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>
面配置:

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

我的方法editStart仅用于导航。

您可以通过会话传递您的用户ID

将参数添加到commandLink

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

<>你可以用你得到的ID重新加载你想要编辑的用户

你可以考虑Przemek的答案或者使用4种方法将参数传递给后援bean。 1.方法表达式 2.f:param 3.f:安替比妥 4.f:setPropertyActionListener

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

它有容易理解的例子。看一看,选择适合你需要的

或者简单地说:

在实际的托管bean中

public String navigationButtonListener(User parameter) {
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap()
            .put("parameterAttribute", parameter);
    return "my-destination-page";
}
@PostConstruct
public void init(){
    myAttribute= (User) FacesContext.getCurrentInstance()
    .getExternalContext().getRequestMap().get("parameterAttribute");

}
在目标托管bean中

public String navigationButtonListener(User parameter) {
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap()
            .put("parameterAttribute", parameter);
    return "my-destination-page";
}
@PostConstruct
public void init(){
    myAttribute= (User) FacesContext.getCurrentInstance()
    .getExternalContext().getRequestMap().get("parameterAttribute");

}

祝你好运

你用什么样的PF版本?在较新的版本中,您可以在EL上下文中传递参数,因此您可以只将用户或其id传递给方法directly@Przemek:对不起,这是胡说八道。这绝对不是特定于正在使用的PF版本。这是特定于所使用的EL版本的。是的,EL2.2是受支持的,因为OP在代码的其他地方有一个明显工作的
{userMB.deleteUser()}
。另请参阅可能的副本,它不是那么简单。My meyhod ediStart返回字符串:“editStart”,在我的脸配置导航中,当在page adminList returnend中返回此值时,我转到page adminEdit。我编辑了我的第一篇文章,看,好的。首先,如果以类似“return”的字符串返回下一页的路径,则可以更轻松地转发到下一页“/path/to/file.xhtml?faces redirect=true”。因此,您不需要在faces配置中映射它。对于第二部分,请看一下如何在会话中传递参数。然后传递用户id并将其重新加载到下一个bean中以供使用。更改/更新会话处理参数passingabusinghttp会话的我的答案从来都不是一个好主意。您需要使用为所讨论的目的而设计的工具,即在发送方页面上使用参数的纯获取链接和在接收方页面上查看参数。关于这个把戏的例子太多了。参考这个,看看那个
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest myRequest = (HttpServletRequest)context.getExternalContext().getRequest();
HttpSession mySession = myRequest.getSession(); 
Integer userId = Integer.parseInt(myRequest.getParameter("userId"));
public String navigationButtonListener(User parameter) {
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap()
            .put("parameterAttribute", parameter);
    return "my-destination-page";
}
@PostConstruct
public void init(){
    myAttribute= (User) FacesContext.getCurrentInstance()
    .getExternalContext().getRequestMap().get("parameterAttribute");

}