Как переместить значение переменной со страницы компонента JSF (например, bean.java) в другой класс Java? - PullRequest
1 голос
/ 14 октября 2011

как переместить значение переменной со страницы bean-компонента jsf (то есть bean.java) в другой класс java?когда я пытался это сделать, значение, связанное с переменной во втором java-классе, равно NULL.,

. Я использовал структуру пользовательского интерфейса primefaces (что-то вроде jsf) и присвоил каждому значению поля класс bean-компонента.значение, назначенное каждой переменной в классе бина, является правильным.но когда я попытался переместить эти значения в другой файл .java.Область действия переменной умирает, а значение равно NULL.Проверьте мои кодировки ..

LOGIN.XHTML

<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">


<h:head></h:head>
<h:body>

<p:panel header="Login" style="">
<h:form>

<h:panelGrid columns="2" cellpadding="2">
<h:outputText value="Username"></h:outputText>
<p:inputText id="userName" value="#{loginBean.userName}"></p:inputText>
<h:outputText value="Password"></h:outputText>
<p:password id="password" value="#{loginBean.password}"></p:password>
<p:commandButton value="Sign in" ajax="false" actionListener="#{loginBean.forward}"></p:commandButton>



</h:panelGrid>

</h:form> 

</p:panel>
</h:body>


</html>

loginBean.java

package bean;
import receive.*;
public class loginBean {
public String userName;
public String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void forward()
{
System.out.println(getUserName());
receiveclass r=new receiveclass();
r.dbc();
}
}

receiveclass.java

package receive;
import bean.loginBean; 
public class receiveclass {
loginBean lb=new loginBean();

public void dbc()
{
  String s= lb.getUserName();
  String p=lb.getPassword();
  System.out.println(s);
  System.out.println(p);
  //System.out.println("hi");

}

}

вывод:

если я даю в качестве администратора, администратор в текстовых полях

я получаю как

admin null null

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Вы создаете бины вручную, а не позволяете JSF управлять бинами.Созданные вручную компоненты не будут использоваться JSF вообще.Вам нужно разрешить JSF автоматически создавать и управлять этими компонентами.Вы можете получить доступ к другим управляемым компонентам JSF, введя его как @ManagedProperty:

В вашем конкретном случае должно работать следующее:

@ManagedBean
@RequestScoped
public class LoginBean {

    private String userName;
    private String password;

    @ManagedProperty
    private ReceiveClass receiveClass;

    public void forward() {
        receiveClass.dbc(this);
    }

    // Add/generate getters and setters.
}

с

@ManagedBean
@SessionScoped
public class ReceiveClass {

    public void dbc(LoginBean loginBean) {
        System.out.println(loginBean.getUserName());
    }

}

(обратите внимание, что я исправил код для правильного соблюдения Java Naming Convention . Имена классов должны начинаться с заглавной буквы)

См. Также:

0 голосов
/ 14 октября 2011

в вашем классе получения вы создаете совершенно новый экземпляр loginBean.Значения могут быть только нулевыми.

Я делаю это следующим образом: я создал класс Java, в котором у меня есть статические функции, подобные этой

public class JSFHelper 
{
   public static Object getMyObject(String objname, Class<?> classname )
   {    
      FacesContext fCtx = FacesContext.getCurrentInstance();
      ELContext elCtx = fCtx.getELContext();
      ExpressionFactory ef = fCtx.getApplication().getExpressionFactory();
      ValueExpression ve = 
        ef.createValueExpression(elCtx, "#{" + objname+ "}",classname);
      return (Object) ve.getValue(elCtx);
   }
}

Если мне нужно значение из другого Бина, то этобудет выглядеть так в вашем receiveclass:

public class receiveclass 
{        

   public void dbc()        
   {          
       loginBean lb=(loginBean)JSFHelper.getMyObject("loginBean",loginBean.class);
       String s= lb.getUserName();          
       String p=lb.getPassword();          
       System.out.println(s);          
       System.out.println(p);          
       //System.out.println("hi");    
   }                
}      
...