【问题标题】:RichFaces rich:collapsibleSubTable not loading results via ajaxRichFaces rich:collapsibleSubTable 不通过 ajax 加载结果
【发布时间】:2013-03-25 11:29:00
【问题描述】:

我正在尝试通过参数化的 ajax 方法调用填充rich:collapsalbeSubTable。

目的是显示客户的列表,当客户被选择时,必须使AJAX调用加载合同列表以填充子表。

<rich:dataTable value="#{searchController.results}" var="customer">

    <rich:column colspan="2">
        <rich:collapsibleSubTableToggler for="contractSubTable" />
        <h:outputText value="#{customer.name}" />
    </rich:column>

    <rich:collapsibleSubTable
        value="#{searchController.getFirstTenContracts(customer.partnerId)}"
        var="contract" id="contractSubTable" expanded="false"
        expandMode="ajax">

        <rich:column>
            <h:outputText value="#{contract.contractId}" />
        </rich:column>
        <rich:column>
            <h:outputText value="#{contract.contractDesc}" />
        </rich:column>

    </rich:collapsibleSubTable>

</rich:dataTable>

但是这会导致以下异常:

javax.servlet.ServletException: javax.el.ELResolver.invoke(Ljavax/el/ELContext;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:221)
    de.hglv.ebusiness.core.presentation.listener.DisableUrlSessionFilter.doFilter(DisableUrlSessionFilter.java:79)



root cause 

java.lang.NoSuchMethodError: javax.el.ELResolver.invoke(Ljavax/el/ELContext;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
    com.sun.el.parser.AstValue.getValue(AstValue.java:111)
    com.sun.el.parser.AstValue.getValue(AstValue.java:163)
    com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
    org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:94)
    javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:246)
    org.richfaces.component.UISequence.getValue(UISequence.java:175)
    org.richfaces.component.UISequence.createExtendedDataModel(UISequence.java:109)
    org.richfaces.component.UIDataTableBase.createExtendedDataModel(UIDataTableBase.java:231)
    org.richfaces.component.UIDataAdaptor.getExtendedDataModel(UIDataAdaptor.java:459)
    org.richfaces.component.UIDataAdaptor.getRowCount(UIDataAdaptor.java:506)
    org.richfaces.renderkit.AbstractTableRenderer.encodeTableRows(AbstractTableRenderer.java:131)
    org.richfaces.renderkit.AbstractTableRenderer.doEncodeChildren(AbstractTableRenderer.java:195)
    org.richfaces.renderkit.RendererBase.encodeChildren(RendererBase.java:157)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:508)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:674)
    org.richfaces.renderkit.DataTableRenderer.encodeRow(DataTableRenderer.java:229)
    org.richfaces.renderkit.AbstractRowsRenderer.process(AbstractRowsRenderer.java:80)
    org.ajax4jsf.model.SequenceDataModel.walk(SequenceDataModel.java:65)
    org.richfaces.component.UIDataAdaptor.walk(UIDataAdaptor.java:796)
    org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:90)
    org.richfaces.renderkit.AbstractRowsRenderer.processRows(AbstractRowsRenderer.java:103)
    org.richfaces.renderkit.AbstractTableRenderer.encodeTableRows(AbstractTableRenderer.java:141)
    org.richfaces.renderkit.AbstractTableRenderer.doEncodeChildren(AbstractTableRenderer.java:195)
    org.richfaces.renderkit.RendererBase.encodeChildren(RendererBase.java:157)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:508)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:674)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:681)
    org.richfaces.renderkit.RendererBase.renderChildren(RendererBase.java:276)
    org.richfaces.renderkit.html.PanelRenderer.encodeEnd(PanelRenderer.java:181)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:685)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:681)
    org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1695)
    org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:281)
    javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
    org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:93)
    javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
    org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:90)
    org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
    de.hglv.ebusiness.core.presentation.listener.DisableUrlSessionFilter.doFilter(DisableUrlSessionFilter.java:79)

)
    de.hglv.ebusiness.core.presentation.listener.DisableUrlSessionFilter.doFilter(DisableUrlSessionFilter.java:79)

Controller方法的签名是:

public List<Contract> getFirstTenContracts(Object partnerId)

如果我的方法有问题,请有人帮我解决这个问题或指出正确的方向。

【问题讨论】:

  • 这就是堆栈跟踪的全部内容吗?
  • 抱歉,应该立即发布整个堆栈跟踪

标签: jsf jsf-2 richfaces


【解决方案1】:

java.lang.NoSuchMethodError 解决了这个问题:

您的方法签名有一个Object 类型的参数,并且您正在传递我认为是int 的内容。即使在普通的旧 java 中,这也会导致编译失败。

只需更改方法签名就可以了

【讨论】:

  • 它是 long 数据类型,但是我已经尝试过 long,Long 并且您可以告诉 Object all 具有相同的结果...
  • @dngfng 那么这很可能是因为您的 EL 版本不支持带参数的方法表达式类型。您使用的是什么应用服务器和 JSF/EL 发行版?这个基于参数的 EL 是在 2.2 中引入的
  • 我们在 Tomcat 6 上使用 el-api 2.2 和 JSF 2.1,el-api 是我检查的第一件事。
  • @dngfng tomcat 6 附带 jsp-api.jar(和其他 JSP 2.1 相关的 jars)。因此,请确保您删除了任何 2.1 相关 jar 的应用服务器安装并重新启动您的应用服务器。
猜你喜欢
  • 1970-01-01
  • 2016-04-16
  • 2012-11-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 2017-07-19
  • 1970-01-01
相关资源
最近更新 更多