JSF 2.1 Tomcat 7.0
这是依赖注入的错误用法吗?
它可以在页面上移动。但“它的工作原理”与“它是正确的”并不相同。
我也会将此模式用于搜索目的。我有一个请求,我喜欢用它来填充同一页面中的表。这可能吗?
的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;
}
更改密码也使用userBean并拥有他的changePasswordBean。
答案 0 :(得分:1)
JSF 2允许您在其他托管bean中injecting managed beans。这只受你实际注入的bean的范围的限制,它必须大于你实际所在的bean的范围。我的意思是,你可以在{{1}中注入@SessionScoped
bean一个,但不是另一个方式。当你遵循这个惯例时,我认为你做得很好。
通常,您的应用程序应由@ViewScoped
或@ViewScoped
bean组成,以处理当前用户输入/输出以及用于会话或应用程序方式的更广泛的bean。因此,当用户登录时,最好将其数据保存在会话上下文中,但是我建议您不要将用户的密码保存到会话中,至少如果您在登录成功后不打算使用它。
最后您提出的关于搜索请求的问题,我认为您可以在页面中实现搜索输入,并根据搜索情况对结果表进行二次加载。只需使用ajax即可获取它而无需重新加载整个页面。您可以在@RequestScoped
bean中实现所有内容,但是如果要维护bean的工作,请记住不要在侦听器方法中返回导航结果。