Abhishek Dhote
Abhishek Dhote

Reputation: 1658

java.lang.IllegalArgumentException: Component javax.faces.component.html.HtmlDataTable is no org.apache.myfaces.custom.datalist.HtmlDataList

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

Answers (3)

user3130674
user3130674

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

BalusC
BalusC

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

Adrian Mitev
Adrian Mitev

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

Related Questions