我是JSF的新手,我遇到了这个问题。我正在阅读一些有关这方面的帖子,但我可以找到答案(或者我没理解一个......)。 我有以下用户bean:
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="user")
@SessionScoped
public class User implements Serializable {
private String login;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
}
和登录bean:
@ManagedBean(name="login")
@SessionScoped
public class Login implements Serializable{
private static final long serialVersionUID = 1L;
@ManagedProperty("#{user}")
private User user;
@PostConstruct
public void init() {
System.out.println("Init called");
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
我的观点如下:
<h:inputText id="login" value="#{login.user.login}" required="true"/>
<h:commandButton value="Login" action="#{login.user.login}"/><br/>
我希望能够访问几个classess中的用户字段,以及我如何尝试实现此目的。不幸的是我一直有这个错误。
我找到了一些我需要的信息beans.xml
。真的吗?我在哪里可以找到样品?我正在使用JSF2。
答案
我的错是我为字段和登录方法选择了相同的名称。因此,我使用login.login
(在实施用户类之前)进行geting登录,将login.login
用作commandButton
的操作。实现用户类后,我将login.login
更改为login.user.login
。
再次感谢您的帮助。
答案 0 :(得分:1)
您正在将方法User#login()
绑定到您不存在的CommandButton
。只有一个属性login
(获取/设置)。
您需要在User
bean中使用适当的操作方法:
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="user")
@SessionScoped
public class User implements Serializable {
private String login;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public void doLogin() {
// whatever you want to do here
}
}
并绑定到doLogin()
方法:
<h:commandButton value="Login" action="#{login.user.doLogin}"/>
启用CDI需要 beans.xml
,您不在此处使用。您正在使用jsf托管bean。 CDI是一种更强大的替代方案。