目标无法访问,标识符'userBean'已解析为null

时间:2017-11-25 15:53:31

标签: jsf cdi managed-bean propertynotfoundexception

  • 有两种配置托管bean的方法,一种是使用“faces-config.xml”文件,另一种是使用“注释”。
  • 所以在这个演示中,我想在MyEclipse中使用注释配置bean,但它不起作用。
  • 以下是代码:

1.UserBean.java

public class UserBean {
String userid;
String password;

@Named("userBean")
@RequestScoped
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;
}}

2.Login.xhtml the page users enter the id and password

3.Welcome.xhtml when user click the submit button, the page comes

4.faces-config.xml中 faces-config.xml

正如您所看到的,我没有在“faces-config.xml”文件中配置托管bean,我只是在我的“UserBean.java”中使用“@Named(”userBean“)”和“@RequestScoped” “用于配置bean的文件。

1.我在网站上打开login.xhtml

http://localhost:8080/JSF/

2.当我点击按钮提交数据时,会显示此页面:

After click the submit button

这些天我开始学习JSF,我需要弄清楚许多困惑的事情,非常感谢你能给我一些关于这个问题的笔记或指导^ _ ^

(Ps.This这是我在stackoverflow上提出的第一个问题,所以我无法直接上传图片,如果你看不到hperlinks的图片,请告诉我。谢谢!)

2 个答案:

答案 0 :(得分:0)

您需要将@Named bean注释设置为类而不是方法。 该错误基本上表示服务器无法找到托管bean类。所以你的代码应该是:

@Named("userBean")
@RequestScoped 
public class UserBean {
    String userid;
    String password;

    public String getUserid() {
        return userid;
    }

我看到了你的Welcome.xhtml。你应该使用#而不是$。 所以你的欢迎页面应该有这样的东西

<h:outputLabel value="#{userBean.password}" />

答案 1 :(得分:0)

  • 我认为我无法使用注释bean的原因是我没有在我的应用程序中配置CDI,因为Tomcat本身并不支持CDI,你应该手动添加一些外部jar文件使它支持。所以这是我配置它的步骤。
  1. 下载weld-servlet.jar文件,这是我下载的链接,你也可以从网上下载。 http://www.jsf2.com/using-cdi-and-jsf-2.2-faces-flow-in-tomcat/samples/weld-servlet.jar
  2. 将此jar文件添加到目录“/ WEB-INF / lib”(最好建立路径)
  3. 在&#34; / WEB-INF&#34;下创建beans.xml文件,使用以下代码段替换beans.xml文件的现有代码:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"></beans>

  4. 还有一件事,你必须实现Serializble接口。

    • 给我整个节目大纲。 image