- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个自定义的 JSF 组件,它以特定方式呈现一些按钮和一个选择框。这是由扩展 UIInput
的类完成的。 xhtml
模板中使用的自定义组件如下所示:
<xx:fooComponent
value="#{fooBean.someProperty}"
valueChangeListener="#{fooBean.someMethodInBean}"
someOtherProperties="true" />
现在,由于我们从运行 JSF 2.0 的 JBoss 4.2.2 更改为使用内置 JSF 库运行的 JBoss 7.1.1,它会提示 someMethodInBean
不是一个属性。当然它不是一个属性,它是一个方法。世界上有谁会将属性绑定(bind)到 valueChangeListener
?
起初我认为,这与方法位于引用 bean 的父类(super class)中有关,但事实并非如此。将此特定方法添加到 FooBean
没有任何区别。
所以我的问题是,他们做了什么更改以致现在出现问题,我该如何以一种有利于迁移的方式修复它?
编辑
组件在我们的 *.taglib.xml
中这样声明:
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<!-- ... -->
<tag>
<tag-name>fooComponent</tag-name>
<component>
<component-type>myProject.FooComponent</component-type>
</component>
</tag>
... 这导致了 faces-config.xml
中的声明:
<component>
<component-type>myProject.FooComponent</component-type>
<component-class>com.myproject.somemore.UIFooComponent</component-class>
</component>
... 导致类 UIFooComponent extends UIInput
。
编辑2
现在 taglib
xml 看起来像这样:
<facelet-taglib version="2.0"
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/web-facelettaglibrary_2_0.xsd">
<tag>
<tag-name>fooComponent</tag-name>
<component>
<component-type>myProject.FooComponent</component-type>
</component>
<attribute>
<name>valueChangeListener</name>
<method-signature>void valueChanged(javax.faces.event.ValueChangeEvent)</method-signature>
</attribute>
</tag>
</facelet-taglib>
仍然,他提示 fooBean
没有属性 someMethodInBean
。
编辑 3
堆栈跟踪是:
Caused by: javax.el.ELException: /abc/abc.xhtml: The class 'com.myproject.managedbeans.foo.FooBean' does not have the property 'someMethodInBean'.
at com.sun.faces.facelets.compiler.AttributeInstruction.write(AttributeInstruction.java:94)
at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:302)
at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:93)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
... 21 more
最佳答案
这表示标记属性未声明为 <method-signature>
在组件的 <tag>
.taglib.xml
中的声明文件如下:
<attribute>
<name>valueChangeListener</name>
<method-signature>void valueChange(javax.faces.event.ValueChangeEvent)</method-signature>
</attribute>
确保已按上述方式正确声明。
更新:您需要确保已声明 .taglib.xml
文件符合 JSF 2.x Facelets XSD(因此不是传统 Facelets 1.x 中的 DTD)。
<facelet-taglib
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/web-facelettaglibrary_2_0.xsd"
version="2.0"
>
<!-- Tags here -->
</facelet-taglib>
关于jsf - 自定义组件上的 ValueChangeListener 导致 PropertyNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11050846/
我已经找到了一些关于这个异常的信息,但我的很奇怪。 Caused by: org.hibernate.PropertyNotFoundException: Could not find a sette
我正在研究 Spring。我无法在 JSP 中显示列表项。它说:在 java.lang.String 类型上找不到属性。我有一个 POJO 类 Student: public class Studen
嗨,我是 hibernate 新手,我使用以下代码并收到以下错误 public class OperProfile { private String empId; private long age;
谁能帮我解决我遇到的异常(exception)情况。 在 servlet 中我将国家列表发送到 jsp request.setAttribute("countries", allCountryList
我在从 tomcat 6 升级到 tomcat 7 后遇到 PropertyNotFoundException。这是我收到的消息: value="#{someHandler.result.someLi
我们有一个自定义的 JSF 组件,它以特定方式呈现一些按钮和一个选择框。这是由扩展 UIInput 的类完成的。 xhtml 模板中使用的自定义组件如下所示: 现在,由于我们从运行 JSF 2.0
我有一个复合组件: 以及调用该复合组件的页面: 和一个包含 Action 的 bean: @Named(value="saveDecision
尝试像#{bean.entity.property}这样引用EL中的托管bean时,有时会抛出javax.el.PropertyNotFoundException: Target Unreachabl
我有一个父类(super class) Person : public class Person { public abstract Type getType(); } 我有它的 2 个子类:
当尝试像#{bean.entity.property}这样在EL中引用托管bean时,有时会抛出javax.el.PropertyNotFoundException: Target Unreachab
当我尝试渲染 View 时,浏览器显示此错误 01:46:11,371 GRAVE [javax.enterprise.resource.webcontainer.jsf.application] (
尝试像#{bean.entity.property}这样引用EL中的托管bean时,有时会抛出javax.el.PropertyNotFoundException: Target Unreachabl
我尝试了 omniFaces 的 AjaxExceptionHandler(非常有用)并将其配置为捕获 java.lang.Throwable以及源自各种请求(不仅是 ajax 请求)的异常。 它工作
当试图像#{bean.entity.property}这样在EL中引用托管bean时,有时会抛出javax.el.PropertyNotFoundException: Target Unreachab
我想从数据库中检索整个表并将其显示到我的 jsp 页面中,但出现错误 我的 StaffBean。 java是 package com.staff.bean; import java.util.Date
我正在开发一个小型消息传递 Web 应用程序来学习 jsp 和 servlet。我有一个具有以下属性的 MessageModel 类: String toAddress ; String fromAd
当尝试像#{bean.entity.property}这样引用EL中的托管bean时,有时会抛出javax.el.PropertyNotFoundException: Target Unreachab
我正在尝试让 Fluent NHibernate 为我映射一个集合。我的类定义如下: public abstract class Team { public virtual Guid Id {
我在 JSP 中遇到错误,我无法弄清楚是什么原因导致的。我已经包含了所有适当的库,并且我确保遵循大写/小写的 bean 约定。这是 JSP 中的相关代码: ${entry.price}
我有两个 POJO,STOCK 和 STOCK_DETAILS(一对多关系)。我还有一个接口(interface) IAUDITLOG(有两种方法)。我需要用两个 POJO 来实现这个接口(inter
我是一名优秀的程序员,十分优秀!