JSF 2.2目标无法访问,标识符'login'解析为null

时间:2014-02-06 11:46:56

标签: jsf cdi

我遇到了一个问题,这可能在这个论坛中很常见,但没有找到好的解决方案。

为什么会出现此问题以及如何解决。

我的节目详情如下

@Named("login")
@SessionScoped

public class Login implements Serializable {

    private String userId;
    private String password;

    @Inject
    private UserBeanLocal userBean;

    public Login() {
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String isValid(){

        if(userBean.getUser(userId).getPassword().equals(getPassword())) {
            return "home?faces-redirect=true";
        }        
        return "index?faces-redirect=true";
    }

和index.xhtml

<h:form>
                    <h:outputText class="title" value="Login"/><br/>
                    <h:inputText id="userId"                               
                                 value="#{login.userId}"                                 
                                 requiredMessage="User Id is required!" /><br />
                    <h:inputText id="password"                                
                                 value="#{login.password}"
                                 requiredMessage="Password is required!"/>

                    <h:commandButton id="submit"
                                     value="Submit"
                                     action="#{login.isValid()}"/>
                </h:form>

并且web.xml和beans.xml文件已经存在..

1 个答案:

答案 0 :(得分:0)

CDI容器是否正常启动?请检查您的日志或尝试注入没有实现的接口,并确保抛出异常。

此外,如果您在beans.xml中没有定义任何内容,那么请删除文件中的所有内容,使其完全为空。

删除@Named定义的(“登录”)部分,使用与默认值完全相同的值覆盖是多余的。

确保使用正确的包导入@SessionScoped。你想要的是javax.enterprise。

进一步回答以下问题:

1)你的容器是什么? 2)CDI以前是否工作过或者这是您的第一次尝试? 3)描述beans.xml文件的确切位置。

从servlet容器中粘贴启动日志也很有帮助(Tomcat,jboss无论如何)