识别并解决javax.el.PropertyNotFoundException:Target Unreachable

时间:2015-05-08 16:15:02

标签: jsf cdi el managed-bean propertynotfoundexception

当尝试像EL $('figure.hello').next('blockquote').addClass("someClass"); 那样引用EL中的托管bean时,有时会抛出#{bean.entity.property}异常,通常是在设置bean属性时,或者当bean动作是调用

似乎有五种不同的消息:

  1. Target Unreachable, identifier 'bean' resolved to null
  2. Target Unreachable, 'entity' returned null
  3. Target Unreachable, 'null' returned null
  4. Target Unreachable, ''0'' returned null
  5. Target Unreachable, 'BracketSuffix' returned null
  6. 他们都是什么意思?它们是如何引起的,它们应该如何解决?

16 个答案:

答案 0 :(得分:6)

对于那些仍然被困的人......

将NetBeans 8.1和GlassFish 4.1与CDI一起使用,由于某些原因,我只在本地而不是在远程服务器上遇到此问题。诀窍是什么:

- >使用javaee-web-api 7.0而不是NetBeans提供的默认pom版本,即javaee-web-api 6.0,所以:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
    <type>jar</type>
</dependency>

- &GT;将此javaee-web-api-7.0.jar作为lib上传到服务器(domain1文件夹中的lib文件夹)并重新启动服务器。

答案 1 :(得分:2)

我决定在自己解决之后分享我对这个错误的发现。

首先,应该认真对待BalusC解决方案,但Netbeans还有另一个可能的问题,特别是在使用Maven构建企业应用项目(EAR)时。

Netbeans生成父POM文件 EAR项目 EJB项目 WAR项目 。 我项目中的其他所有内容都很好,我几乎认为问题是GlassFish 4.0中的一个错误(我必须安装并将其插入Netbeans),因为GlassFish 4.1有一个Weld CDI错误,它在Netbeans 8.0中嵌入了GlassFish 4.1。 2除了通过补丁外无法使用。

<强>解决方案:

要解决“目标无法访问,标识符'bean'已解析为null” 错误 -

我右键单击父POM项目,然后选择属性。出现项目属性对话框,单击“来源”,您会惊讶地看到“源/二进制格式”设置为1.5并且“编码”设置为Windows 1250。 将“源/二进制格式”更改为1.6 0r 1.7,无论您希望将项目CDI兼容,还是将“编码”更改为UTF-8。

对所有其他子项目(EAR,EJB,WAR)执行相同操作(如果它们尚不可分隔)。 运行您的项目,您将不会再次收到该错误。

我希望这可以帮助那些有类似错误的人。

答案 2 :(得分:1)

我决定分享我的解决方案,因为尽管此处提供的许多答案是有帮助的,但我仍然遇到这个问题。就我而言,我为新项目使用了JSF 2.3,jdk10,jee8,cdi 2.0,并且我确实在wildfly 12上运行了我的应用,并按照wildfly网站上的建议使用参数standalone.sh -Dee8.preview.mode = true启动了服务器。下载wildfly 13之后,“ bean解析为null”的问题消失了。将完全相同的战争上传到wildfly 13使得一切正常。

答案 3 :(得分:1)

我被卡在这个错误上是因为在具有@SpringBootApplication的类中,我忘记指定控制器的软件包名称。

这次我想更具体地指出Spring必须扫描哪些组件,而不是配置基本软件包。

是这样的:

@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service"})

但是正确的格式是其中之一:

@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service", "br.com.company.project.controller"})

@ComponentScan(basePackages = {"br.com.company.project")

我决定分享自己的解决方案,因为尽管正确的答案非常全面,但并不能解决这个(愚蠢的)错误:)

答案 4 :(得分:0)

在我的情况下,我在@Named(&#34; beanName&#34;)中犯了一个拼写错误,它被认为是&#34; beanName&#34;,但是我写了#34; beanNam&#34 ;,例如。

答案 5 :(得分:0)

我正在使用wildfly 10作为javaee容器。我曾经历过“Target Unreachable,'entity'返回null”问题。感谢BalusC的建议,但我解决了解决方案的问题。 无意中使用“import com.sun.istack.logging.Logger;”而不是“import org.jboss.logging.Logger;”导致CDI实施JSF EL。 希望它有助于改善解决方案。

答案 6 :(得分:0)

我遇到了同样的问题。结果证明解决方案要简单得多。似乎数据表需要getter形式的方法,即getSomeMethod(),而不仅仅是someMethod()。在我的数据表中,我调用了findResults。我将我的支持bean中的方法更改为getFindResults()并且它工作正常。

一个commandButton工作时发现没有得到的东西只会让它变得更加混乱。

答案 7 :(得分:0)

关于#2,就我而言,它在替换后神奇地复活了

<body>

带有

的标签
<h:body>

完成了几个(简单来说,很简单)的JSF项目之后,我不记得现在要进行任何其他设置了,而我第一次遇到这种错误。我创建了一个非常基本的登录页面(用户名,密码,用户Bean ...),并像往常一样设置了所有内容。我发现的唯一区别是上述标签。也许有人觉得这很有用。

答案 8 :(得分:0)

在我的情况下,问题是我包括一个带有参数的构造函数,但没有一个带有Inject注释的空构造函数,像这样。

@Inject public VisitorBean() {}

我只是在没有任何构造函数的情况下对其进行了测试,这似乎也可以工作。

答案 9 :(得分:0)

对于1.主题(无法到达目标,标识符“ bean”解析为空);

我检查了@BalusC和其他共享者的有价值的答案,但在我的方案中我超过了这个问题。 在使用不同的名称创建新的xhtml并使用不同的名称创建bean类之后,我将代码逐步(而不是复制粘贴)写入新的bean类和新的xhtml文件。

答案 10 :(得分:0)

当我从web.xml文件中删除AnnotationConfigWebApplicationContext上下文参数时,这是可行的

如果您有如下所示的param,则必须将其从web.xml文件中删除

<context-param>
    <param-name>contextClass</param-name>
    <param-value>
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  </param-value>
</context-param> 

答案 11 :(得分:0)

这也可能是Mojarra 2.3 https://github.com/eclipse-ee4j/mojarra/issues/4734

中的错误

答案 12 :(得分:-1)

使用旧样式使用JSF您必须在中定义托管bean beans-config.xml 文件(位于WEB-INF文件夹中)并在 web.xml 文件中引用它,这样:

<强>豆-config.xml中

<managed-bean>
  <managed-bean-name>"the name by wich your backing bean will be referenced"</managed-bean-name>
  <managed-bean-class>"your backing bean fully qualified class name"</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>    
</managed-bean>

(我已尝试使用其他示波器,但......)

<强>的web.xml

<context-param>
  <param-name>javax.faces.CONFIG_FILES</param-name>
  <param-value>"/WEB-INF/beans-config.xml</param-value>
</context-param>

答案 13 :(得分:-1)

另一条线索: 我使用的是JSF,并添加了mvn依赖项:                      com.sun.faces             JSF的API             2.2.11         

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.11</version>
    </dependency>

然后,我尝试更改为Primefaces,并添加primefaces依赖项:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>6.0</version>
</dependency>

我将xhtml从h:更改为p:,将xmlns:p =“http://primefaces.org/ui”添加到模板中。 只有使用JSF,proyect运行正常,并且托管bean已经达到正常状态。当我添加Primefaces时,我得到了无法访问的对象(javax.el.propertynotfoundexception)。问题是JSF正在生成ManagedBean,而不是Primefaces,而我正在询问该对象的primefaces。我不得不从我的.pom中删除jsf-impl,清理并安装proyect。 从这一点开始一切顺利。 希望有所帮助。

答案 14 :(得分:-2)

EL按照说明解释$ {bean.propretyName}-假设您使用的是生成getter / setter的显式或隐式方法,则propertyName变为getPropertyName()

您可以通过将名称明确标识为函数来覆盖此行为:$ {bean.methodName()}这将直接调用函数方法Name()而不进行修改。

将访问器命名为“ get ...”并不总是正确的。

答案 15 :(得分:-3)

在我的情况下,“ el-ri-1.0.jar”丢失了。