我的项目中有关于actionlistener的问题。我正在创建一个网站,但我的问题是登录,我使用复合和JSF。每当我尝试登录时,我都会得到一个nullpointer,指向if语句中的actionlistener类第30行。
ActionListener类
public class LoginActionListener implements ActionListener {
@Inject private Service service;
@Override
public void processAction(ActionEvent event) throws AbortProcessingException {
UIComponent container = event.getComponent().getNamingContainer();
String username = (String) ((UIInput)
container.findComponent("form:username")).getValue();
String pwd = (String) ((UIInput)
container.findComponent("form:password")).getValue();
if(service.isRegistered(username, pwd))
return;
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(container.getClientId(),
new FacesMessage("Username and password are invalid. Please try again."));
throw new AbortProcessingException("Invalid credentials");
}
}
服务类
public boolean isRegistered(String username, String password){
for (User u : users) {
if (u.getUserName().equals(username) && u.getPassword().equals(password))
return true;
}
return false;
}
最好的问候 雅各布
答案 0 :(得分:1)
如果您的服务为null,则注入Service类似乎存在问题。检查Service类是否具有允许注入该类的正确注释。请注意,您应该从一个包中使用注释:
对于基于CDI的bean定义
javax.enterprise.context.SessionScoped
javax.inject.Named
javax.inject.Inject
对于基于JSF的bean定义
javax.faces.bean.SessionScoped
javax.faces.bean.ManagedBean
javax.faces.bean.ManagedProperty
例如:
@Named
@SessionScoped
public class Service {
...
public boolean isRegistered(String username, String password){
for (User u : users) {
if (u.getUserName().equals(username) && u.getPassword().equals(password))
return true;
}
return false;
}
}