服务未在ActionListener中注入

时间:2015-01-13 23:10:42

标签: jsf actionlistener cdi

我的项目中有关于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;  
} 

复合登录xhtml文件
http://blg.nikonsrc.com/image/4nEwBZn2a6VnBoCaET-wUiU_iwnRwLBaMfMR67ypIKVyameRSjNcbAmtoKug6n4_PWUXZcEFpp8/item.JPG?rot=0

http://blg.nikonsrc.com/image/4nEwBZn2a6VnBoCaET-wUiU_iwnRwLBaMfMR67ypIKU7KIV8XlnDFQmtoKug6n4_PWUXZcEFpp8/item.JPG?rot=0

最好的问候 雅各布

1 个答案:

答案 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; 
    } 
}