2

来自 JSF 初学者的简单问题:

我有非常简单的 JSF 表单:

<h:form>
<p>#{messages.loginTextfieldUsername}</p>
<h:inputText value="#{userServiceImpl.user.name}" />

<p>#{messages.loginTextfieldPassword}</p>
<h:inputSecret value="#{userServiceImpl.user.password}" />

<h:commandButton value="#{messages.loginButtonLogin}" action="#{userServiceImpl.authenticateUser}" />
</h:form>

userServiceImpl 类是:

@Named
@RequestScoped
public class UserServiceImpl implements UserService {

private UserSession userSession;
private User user;

@Inject
public UserServiceImpl(UserSession userSession) {
    this.userSession = userSession;
}

@PostConstruct
public void prepareService() {
    user = new User();
}

@Override
public View authenticateUser() {
    userSession.setLoggedUser(user);
    return View.MAIN;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

}

我的目标很简单:当用户点击登录按钮时,我想对用户进行身份验证。

问题是:当调用authenticate 方法时,User 属性为null。我调试了应用程序并调用了 getUser 方法并且正确设置了值,但是在调用 authenticateUser 之前的某个时间点(我还没有找到 [尚未])用户属性设置为 null ...

我知道这是一个非常基本的问题......但是你能指出我的错误在哪里吗?

谢谢。

4

1 回答 1

0

根据您之前的问题,您似乎出于某种原因尝试<managed-bean-scope>nonein 。faces-config.xml问题症状在使用时完全匹配@ManagedBean @NoneScoped。您似乎已经在完全解释这个问题faces-config.xmlnone范围内配置了这个 bean。使用范围,每次在 EL 中评估时都会none创建一个全新的 bean 实例。#{userServiceImpl}因此,您的表单提交有效地创建了 3 个 bean:一个设置了用户名,另一个设置了用户密码,另一个设置了操作。

您需要faces-config.xml. 当您打算使用@Inject(或@ManagedBean)时,您不应该使用它。faces-config.xml当注释不可用时,配置 bean的方式是旧 JSF 1.x 时代的遗留物。从 JSF 2.x 开始,它只会覆盖任何 bean 管理注释。

于 2012-05-23T16:09:20.620 回答