2012-01-25 13 views
1

私のJSFアプリケーションでは、データ表&のデータリストをtomhawkの実装からよくあるが、時には私は例外になる。これは、Chromeブラウザのみを使用している場合にのみ発生します。java.lang.IllegalArgumentException:コンポーネントjavax.faces.component.html.HtmlDataTableはorg.apache.myfaces.custom.datalist.HtmlDataListではありません

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> 
+0

FindB.dataは、オブジェクトの種類ですか? – Daniel

+0

これはjavax.faces.component.UIData型です –

+0

HtmlDataListオブジェクトではないと思われます(例:private eHtmlDataList data; // getter/setterで? – Daniel

答えて

0

は、バインディングの問題のように見えます。あなたのFINDB Beanでは、あなたは

private HtmlDataTable data; 
//getters/setters 

を持っているしかし、あなたが持っている必要があります。代わりに

private HtmlDataListdata; 
//getters/setters 

。 t:dataListはorg.apache.myfaces.custom.datalist.HtmlDataList型の参照にバインドする必要があるためです。

2

binding="#{FindB.data}"は、1つだけコンポーネントによって使用されるプロパティを参照する必要があります。この例外は、Beanがセッションスコープであること、およびを<h:dataTable>コンポーネント上でwebapp内の別の場所に共有していることを示しています。 Chromeでのみ発生するのは、同じセッションで事前に<h:dataTable>という別のページを開いた唯一のブラウザだからです。

bindingの背後にあるプロパティを複数のコンポーネントで共有しないようにしてください。それ以外の場合、Beanは実際にリクエストスコープに含まれています。または、おそらくvalueDataModelにすることによって、bindingを取り除く方法を探してください。

あなたは以下の通りあなたのリストを設定している親切
0

:代わりにその

/** 
* 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); 
    } 
} 
関連する問題