目标无法访问,标识符'用户'解析为null

时间:2016-01-10 15:20:39

标签: jsf jsf-2.2

所以我有这个非常奇怪的问题...我已经尝试在StackOverflow上搜索并尝试了我能找到的所有内容,但我无法解决这个错误。错误是:

  

/index.xhtml @ 15,60 value ="#{user.name}":目标无法访问,标识符'用户'解析为null

这是一个学校项目,该项目适用于我的一些同学,但它也不会为某些人工作。当我们打开它们时,它可能是NetBeans搞砸了吗?到目前为止,至少有2人使用它,但至少有2人也遇到了这个错误。

的index.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Welcome</title>
    </h:head>
    <h:body>
        <h:form>
            <h3>Please enter your name and password.</h3>   
            <table>
                <tr>
                    <td>Name:</td>
                    <td><h:inputText value="#{user.name}"/></td>
                    <td>.</td>
                    <td><h:inputText value="#{user.userId}"/></td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><h:inputSecret value="#{user.password}"/></td>
                </tr>
            </table>
            <p><h:commandButton value="Login" action="welcome"/></p>
        </h:form>
    </h:body>
</html>

welcome.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Welcome</title>
    </h:head>
    <h:body>
        <h3>Welcome to JavaServer Faces, #{user.name}.#{user.userId}!</h3>
        <h3>your password is #{user.password}</h3>
    </h:body>
    <h:form>
        <h:commandButton value="Logout" action="index"/>
    </h:form>
</html>

UserBean.java

package com.corejsf;

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;

@Named("user")
@SessionScoped
public class UserBean implements Serializable {

    private String name;
    private String password;
    private Integer userId;

    public String getName() {
        return name;
    }

    public void setName(String newValue) {
        name = newValue;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String newValue) {
        password = newValue;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer newValue) {
        userId = newValue;
    }

    public String logout() {
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
        return "index";
    }
}

它的基本功能是在index.xhtml上使用任何用户名,ID和密码。然后按login,将您发送到welcome.xhtml(因为action="welcome")。 welcome.xhtml应该在页面上发布您的用户名,ID和密码。但是,当我按下登录按钮时,我收到此错误:

  

/index.xhtml @ 15,60 value =&#34;#{user.name}&#34;:目标无法访问,标识符&#39;用户&#39;解析为null

我确实尝试过切换到ManagedBean(@ManagedBean(name="user")),但这导致了同样的事情。

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。显然,对于我们中的一些人来说,导入的项目名称与<context-root>元素的名称不匹配。我们所要做的就是进入WEB-INF并找到glassfish-web.xml。在该文件中,检查<context-root>内的内容,并将其替换为您的项目名称,或者只是将项目重命名为该元素内的任何内容。

花了几个小时来弄明白,但希望其他人会发现这一点并欣赏我的回答。