Reputation: 1658
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>
Upvotes: 1
Views: 3470
Reputation: 1
kindly when you are set your list as the following:
/**
* Setter Related Report Link Roles.
*
* @param relatedReportLinkRoles: Related Report Link Roles.
*/
public void setRelatedReportLinkRoles(List relatedReportLinkRoles) {
this.relatedReportLinkRoles = relatedReportLinkRoles;
}
instead of that you must use the following:
/**
* Setter Related Report Link Roles.
*
* @param relatedReportLinkRoles: Related Report Link Roles.
*/
public void setRelatedReportLinkRoles(List relatedReportLinkRoles) {
this.relatedReportLinkRoles = relatedReportLinkRoles;
if(roleRelatedReportDataTable != null) {
roleRelatedReportDataTable.setValue(relatedReportLinkRoles);
}
}
Upvotes: 0
Reputation: 1109865
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 same binding="#{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 of binding
, perhaps by making the value
a DataModel
.
Upvotes: 2
Reputation: 4752
Looks like a binding problem. In your FindB bean you have
private HtmlDataTable data;
//getters/setters
But you should have:
private HtmlDataListdata;
//getters/setters
instead. Because t:dataList has to be bound to a reference of type org.apache.myfaces.custom.datalist.HtmlDataList.
Upvotes: 0