java.lang.IllegalArgumentException:组件 javax.faces.component.html.HtmlDataTable 不是 org.apache.myfaces.custom.datalist.HtmlDataList

发布于 2024-12-28 23:44:05 字数 3666 浏览 3 评论 0原文

在我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尘世孤行 2025-01-04 23:44:05

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 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.

绅刃 2025-01-04 23:44:05

看起来像是一个绑定问题。在您的 FindB bean 中,您有

private HtmlDataTable data;
//getters/setters

But you should have:

private HtmlDataListdata;
//getters/setters

相反。因为 t:dataList 必须绑定到 org.apache.myfaces.custom.datalist.HtmlDataList 类型的引用。

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.

南街女流氓 2025-01-04 23:44:05

当您将列表设置为以下时,请

/**
 * Setter Related Report Link Roles.
 * 
 * @param relatedReportLinkRoles: Related Report Link Roles.
 */
public void setRelatedReportLinkRoles(List relatedReportLinkRoles) {
    this.relatedReportLinkRoles = relatedReportLinkRoles;
}

改为:您必须使用以下内容:

/**
 * 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);
    }
}

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);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文