2013-02-10 43 views
0

JSF 2.1 的Tomcat 7.0JSF正確的使用依賴

這是一種錯誤的使用依賴注入?

它可以在頁面上移動。但是「有效」與「這是正確的」不一樣。

我會使用這種模式也用於搜索目的。我有一個請求,我喜歡用它來在同一頁面中填充表格。這可能嗎?

的index.xhtml

<?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://java.sun.com/jsf/html"> 
    <h:head> 
     <link rel="SHORTCUT ICON" href= "resources/img/onlyT.ico"></link> 
     <title>title</title> 
     <h:outputStylesheet library="css" name="compass.css"/> 
    </h:head> 
    <h:body> 
     Login system 
     <br /> 

     <h:form> 
      User : <h:inputText value="#{user.username}" /> 
      Password : <h:inputSecret value="#{user.password}" /> 
      <h:commandButton action="#{loginBean.performLogin()}" value="Submit" /> 
      <h:commandButton value="reset" type="reset" /> 
      <h:commandButton value="ChangePsW" action="changePassword"></h:commandButton> 
     </h:form> 

     <h:message for="" style="color:red;margin:8px;"/> 

    </h:body> 
</html> 

LoginBan.java

@ManagedBean 
@RequestScoped 
public class LoginBean { 


    @ManagedProperty(value="#{user}") 
    private UserBean userBean; 

    //must povide the setter method 
    public void setUserBean(UserBean userBean) { 
     this.userBean = userBean; 
    } 

    public LoginBean() {} 


    public String performLogin(){ 


     //Mi connetto al db 
     if(userBean.getUsername().equalsIgnoreCase("mario")){ 

     //effettuo i controlli per stabilire se esiste l'utente 

     userBean.setRoles("-EE-E-E-E-E-E"); 
     return "/mainPortal/mainPortal"; 
     } 
     return "/mainPortal/index"; 

    } 
} 

UserBean.java

@ManagedBean (name="user") 
@SessionScoped 
public class UserBean implements Serializable { 

private String Username; 
private String Password; 
private String Roles; 

/** Creates a new instance of UserBean */ 
public UserBean() { 
} 


/** 
* @return the Username 
*/ 
public String getUsername() { 
    return Username; 
} 


/** 
* @param Username the Username to set 
*/ 
public void setUsername(String Username) { 
    this.Username = Username; 
} 


/** 
* @return the Password 
*/ 
public String getPassword() { 
    return Password; 
} 


/** 
* @return the Roles 
*/ 
public String getRoles() { 
    return Roles; 
} 


/** 
* @param Roles the Roles to set 
*/ 
public void setRoles(String Roles) { 
    this.Roles = Roles; 
} 


/** 
* @param Password the Password to set 
*/ 
public void setPassword(String Password) { 
    this.Password = Password; 
} 

變化passwo rd也使用userBean並具有他的changePasswordBean。

回答

1

JSF 2允許您在其他託管的bean中使用injecting managed beans。這隻受限於你實際注入的bean的範圍,它必須大於你實際使用的bean的範圍。我的意思是,你可以在@ViewScoped之一注入@SessionScoped bean,但不能注入其他bean辦法。當你遵循這個慣例時,我認爲你做得很好。

通常,您的應用程序應由@ViewScoped@RequestScoped beans組成,以處理當前用戶輸入/輸出以及用於會話或應用程序方式的更大範圍的bean。所以,當用戶登錄時,在會話上下文中維護他的數據是一個好主意,但是我建議你不要在會話中保留用戶的密碼,至少在登錄成功完成後你不打算使用它。

最後您提出的問題關於搜索請求,我認爲您可以在您的頁面中實現搜索輸入,並根據搜索結果以dinamically方式加載結果表。只需使用ajax來獲取它,而無需重新加載整個頁面。您可以在@ViewScoped bean中實現所有內容,但是如果要維護Bean,請記住不要在監聽器方法中返回導航結果。

+0

謝謝!太好了,清楚簡單! – user1594895 2013-02-11 09:20:32