2016-12-27 136 views
0

我正在开发一个应用程序,我必须根据用户输入显示来自数据库的数据(比如说,雇员ID的字段empid,并根据此输入显示来自数据库的一些信息)。我正在使用JSF,PrimeFace和Hibernate。在JSF页面之间传递信息

现在我有index.xhtml页面,我正在输入empid。之后,我必须重定向到另一页page2.xhtml。

这里是一个的index.xhtml片段:

 <h:form> 
     <p>Employee ID: 
      <p:inputText value="#{userBean.newuser.empid}" required="true"/></p> 
    </h:form> 
    <br /> 
    <h:form> 
     <p:commandButton action="page2?faces-redirect=true" value="Enter" />  
    </h:form> 

但经过重新定向到page2.xhtml,从页面的index.xhtml的EMPID输入丢失。我试着读了一些关于此的帖子,但无法理解。请帮忙。如果这是一个重复的问题,我很抱歉。

+0

您的输入字段和您的命令按钮是不同的形式? –

+0

是的,我注意到了。我把它们放在同一个表格中,但这样也不好。 – rkarwayun

+0

https://stackoverflow.com/questions/31147487/jsf-passing-parameter-between-two-requestscoped-managed-beans-in-jsf-page – Kukeltje

回答

0

我认为您所在的受管理bean的视图范围是@RequestScope?您可以为托管bean指定更宽的视图范围,所以在每次请求后它不会被销毁。然而@RequestScope真的很好,当想要最小化会话范围膨胀。要保留这个会话范围,您可以使用flash JSF 2.0中引入的对象。感谢这个对象,你可以在请求之间传输数据。你可以把下面的代码片段:

ExternalContext.getFlash().put("empid", newuser.getEmpid); 

在你的userBean。重定向后,您可以检索通过以下方式JSF页面上的值:

#{flash.empid}

或者在您的托管bean:

ExternalContext.getFlash().get("empid"); 

更多与例如闪光灯可以在此post或中找到JSF 2 Flash documentation

+0

谢谢你的帮助。会试试这个。 – rkarwayun

+0

代码中的ViewAccessScoped非常适合。预防'sessionBloat'的扩展并保持你的代码简单... – Kukeltje