java.lang.IllegalArgumentException:组件 javax.faces.component.html.HtmlDataTable 不是 org.apache.myfaces.custom.datalist.HtmlDataList
在我的 JSF 应用程序中,我使用数据表和数据表。 tomhawk 实现的数据列表以及但有时我会遇到以下异常。仅当我仅使用 Chrome 浏览器时才会发生这种情况。
java.lang.IllegalArgumentException: Component javax.faces.component.html.HtmlDataTable is no org.apache.myfaces.custom.datalist.HtmlDataList
org.apache.myfaces.custom.datalist.HtmlDataListTag.setProperties(HtmlDataListTag.java:117)
javax.faces.webapp.UIComponentTag.createComponent(UIComponentTag.java:209)
javax.faces.webapp.UIComponentClassicTagBase.createChild(UIComponentClassicTagBase.java:476)
javax.faces.webapp.UIComponentClassicTagBase.findComponent(UIComponentClassicTagBase.java:660)
javax.faces.webapp.UIComponentClassicTagBase.doStartTag(UIComponentClassicTagBase.java:1126)
org.apache.jsp.HomeV_jsp._jspx_meth_t_005fdataList_005f0(HomeV_jsp.java:3903)
org.apache.jsp.HomeV_jsp._jspx_meth_h_005fform_005f1(HomeV_jsp.java:3861)
org.apache.jsp.HomeV_jsp._jspx_meth_f_005fview_005f0(HomeV_jsp.java:450)
org.apache.jsp.HomeV_jsp._jspService(HomeV_jsp.java:155)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:696)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:667)
org.apache.jsp.index_jsp._jspService(index_jsp.java:67)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.advernture.discountbox.security.PageFilter.doFilter(PageFilter.java:43)
有人知道这里可能发生什么吗? 导致这个问题的代码如下:
<h:form id="browse_by_categry_frm">
<div id="tagcloud">
<t:dataList id="offer_cloud_table" value="#{CityCatagoryB.ctgryLstAsStr}" var="cat" binding="#{FindB.data}" layout="simple">
<span style="padding-left:10px;padding-right:10px">
<h:commandLink value="#{cat}" action="#{FindB.doFind}" styleClass="subMenu"/>
</span>
</t:dataList>
</div>
</h:form>
In my JSF application I am using data table & data list from tomhawk`s implementation as well as but sometimes I get following exception. This happens only when I am using Chrome browser only.
java.lang.IllegalArgumentException: Component javax.faces.component.html.HtmlDataTable is no org.apache.myfaces.custom.datalist.HtmlDataList
org.apache.myfaces.custom.datalist.HtmlDataListTag.setProperties(HtmlDataListTag.java:117)
javax.faces.webapp.UIComponentTag.createComponent(UIComponentTag.java:209)
javax.faces.webapp.UIComponentClassicTagBase.createChild(UIComponentClassicTagBase.java:476)
javax.faces.webapp.UIComponentClassicTagBase.findComponent(UIComponentClassicTagBase.java:660)
javax.faces.webapp.UIComponentClassicTagBase.doStartTag(UIComponentClassicTagBase.java:1126)
org.apache.jsp.HomeV_jsp._jspx_meth_t_005fdataList_005f0(HomeV_jsp.java:3903)
org.apache.jsp.HomeV_jsp._jspx_meth_h_005fform_005f1(HomeV_jsp.java:3861)
org.apache.jsp.HomeV_jsp._jspx_meth_f_005fview_005f0(HomeV_jsp.java:450)
org.apache.jsp.HomeV_jsp._jspService(HomeV_jsp.java:155)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:696)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:667)
org.apache.jsp.index_jsp._jspService(index_jsp.java:67)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.advernture.discountbox.security.PageFilter.doFilter(PageFilter.java:43)
Does anyone has any clue about what might be happening here?
The code which causes this is as follows:
<h:form id="browse_by_categry_frm">
<div id="tagcloud">
<t:dataList id="offer_cloud_table" value="#{CityCatagoryB.ctgryLstAsStr}" var="cat" binding="#{FindB.data}" layout="simple">
<span style="padding-left:10px;padding-right:10px">
<h:commandLink value="#{cat}" action="#{FindB.doFind}" styleClass="subMenu"/>
</span>
</t:dataList>
</div>
</h:form>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
binding="#{FindB.data}"
应引用仅由一个组件使用的属性。此异常表明该 Bean 是会话范围的,并且您在
组件上共享相同的binding="#{FindB.data}"
网络应用程序中的其他地方。仅在 Chrome 中出现这种情况可能是因为它是您事先在同一会话中使用
打开另一个页面的唯一浏览器。确保您不会在多个组件之间共享
绑定
背后的属性。否则,您的 bean 必须确实位于请求范围内。或者,寻找一种摆脱绑定
的方法,也许可以通过将值
设置为DataModel
。The
binding="#{FindB.data}"
should refer to a property which is used by only one component. This exception indicates that the bean is session scoped and that you're sharing the samebinding="#{FindB.data}"
on a<h:dataTable>
component somewhere else in the webapp. That it occurs in Chrome only is probably because it was the only browser where you have opened the other page with<h:dataTable>
in the same session beforehand.Make sure that you don't share the property behind
binding
among multiple components. Otherwise your bean has really to be in the request scope. Or, look for a way to get rid ofbinding
, perhaps by making thevalue
aDataModel
.看起来像是一个绑定问题。在您的 FindB bean 中,您有
But you should have:
相反。因为 t:dataList 必须绑定到 org.apache.myfaces.custom.datalist.HtmlDataList 类型的引用。
Looks like a binding problem. In your FindB bean you have
But you should have:
instead. Because t:dataList has to be bound to a reference of type org.apache.myfaces.custom.datalist.HtmlDataList.
当您将列表设置为以下时,请
改为:您必须使用以下内容:
kindly when you are set your list as the following:
instead of that you must use the following: