2014-11-25 53 views
0

如果我为我的managedbean使用会话作用域,那么我可以将一个变量值传递给所有页面,但是 如果我将我的变量值用于我的managedbean,那么我的变量值将首页,但不会第二页。这意味着如何将值传递给第二个jsf页面

第一页包含

<p:inputText id="email" required="true" 
            requiredMessage="Enter Email" 
            value="#{loginController.empEmail}" > 
           </p:inputText> 
<p:commandButton id="OTP" action="#{loginController.generateOTPForEmp}" 
           rendered="#{loginController.loginAsEmp}" value="Generate OTP" update="@form"> 
          </p:commandButton> 

managedbeans

public String generateOTPForEmp() { 
System.out.println(loginAsEmp); 
} 

第二页包含

<p:inputText id="email" required="true" 
             requiredMessage="Enter Email" 
             value="#{loginController.empEmail}" > 
            </p:inputText> 

在第二页“empEmail”不显示

我需要通过该empEmail到第二页也 我需要做什么? (with viewingcope)

回答

-1

在会话scoped中定义一个用于存储用户数据的bean,这是一个视图范围内的控制器,用于处理视图。

@Named("loginCtrl") 
@ViewScoped 
public class LoginController { 

    @Inject private LoginData data; 
    private long viewData; 

    @PostConstruct 
    public void init(){ 
     setViewData(System.currentTimeMillis()); 
    } 

    public String doLogin(){ 
     return "index2.xhtml"; 
    } 

    public String goto3(){ 
     return "index3.xhtml"; 
    } 

    public LoginData getData() { 
     return data; 
    } 


    public void setData(LoginData data) { 
     this.data = data; 
    } 


} 

然后你在sessionScope

数据
@SessionScoped 
public class LoginData implements Serializable{ 

    private String name; 
// getters and setters 

,然后在视图1

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
     xmlns:f="http://xmlns.jcp.org/jsf/core"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <h:form id="form"> 
      <p><h:outputText value="new data #{loginCtrl.viewData}" /></p>    
      <p><h:inputText id="txName" value="#{loginCtrl.data.name}" /></p> 
      <p><h:commandButton value="Login" action="#{loginCtrl.doLogin()}"></h:commandButton></p> 
     </h:form> 
    </h:body> 
</html> 

鉴于2

<h:form id="form"> 
     <p><h:outputText value=" new data #{loginCtrl.viewData}" /></p> 
      <p><h:outputText id="txName2" value="#{loginCtrl.data.name}" /></p> 
      <p><h:commandButton value="Login" action="#{loginCtrl.goto3()}"></h:commandButton></p> 

     </h:form> 

和例如它甚至考虑到3个有效

<h:form id="form"> 
    <p><h:outputText value="new data #{loginCtrl.viewData}" /></p>    
    <p><h:outputText id="txName2" value="#{loginCtrl.data.name}" /></p> 
</h:form> 

在“viewData”中,您可以检查每次更改视图时是否拥有一个新的bean实例,但具有相同的会话数据。

-1

这不可能与@ViewScoped,你需要使用@CustomScoped来实现这一点。 (我假设你不愿意使用@SessionScoped

Here是一篇很好的文章。

相关问题