简体   繁体   English

将带有f:param的h:commandButton添加到h:dataTable时发生IllegalArgumentException

[英]IllegalArgumentException when adding h:commandButton with f:param to h:dataTable

Currently I'm using a datatable to display some items out of a database. 目前,我正在使用数据表来显示数据库中的某些项目。 Works fine. 工作正常。

<h:dataTable border="1" value="#{overviewBean.loadContent }" var="item" first="0" >
    <h:column id="column1">
        <f:facet name="header">
            <h:outputText value="#{messages.overviewSubscriptionID }"></h:outputText>
        </f:facet>
        <h:outputText value="#{item.subscriptionID }"></h:outputText>
    </h:column>
    <h:column id="column2">
        <f:facet name="header">
            <h:outputText value="#{messages.overviewCourseID}"></h:outputText>
        </f:facet>
        <h:outputText value="#{item.courseID }"></h:outputText>
    </h:column>
    ...
    <h:column id="column13">
        <f:facet name="header">
            <h:outputText value="#{messages.overviewDeleteItem }"></h:outputText>
        </f:facet>
        <h:commandButton action="#{overviewBean.delete}" value="X">
            <f:param name="delete" value="#{item.courseID}"></f:param>
        </h:commandButton>
    </h:column>
</h:dataTable>

Whenever now the param-tag is there, the page doesn't load. 现在只要有param标签,页面就不会加载。 This is the exception that is thrown: 这是抛出的异常:

/overview.jsp(15,1) '#{overviewBean.loadContent }' java.lang.IllegalArgumentException
Caused by:
java.lang.IllegalArgumentException - java.lang.IllegalArgumentException


Edit: Because requested, I added the entire stacktrace (as seen on the generated page): 编辑:由于要求,我添加了整个stacktrace(在生成的页面上看到):

 org.apache.jasper.el.JspELException: /overview.jsp(15,1) '#{overviewBean.loadContent }' java.lang.IllegalArgumentException at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107) at javax.faces.component.UIData.getValue(UIData.java:1142) at javax.faces.component.UIData.createDataModel(UIData.java:1082) at javax.faces.component.UIData.getDataModel(UIData.java:1056) at javax.faces.component.UIData.getRowCount(UIData.java:449) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:234) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:143) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:250) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:257) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:257) at org.apache.myfaces.application.jsp.JspViewHandlerImpl.actuallyRenderView(JspViewHandlerImpl.java:427) at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:383) at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:187) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662) Caused by: javax.faces.el.EvaluationException: java.lang.IllegalArgumentException at org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:80) at org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:95) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142) at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:68) at org.apache.el.parser.AstValue.getValue(AstValue.java:112) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101) ... 27 more Caused by: javax.el.ELException: java.lang.IllegalArgumentException at javax.el.BeanELResolver.setValue(BeanELResolver.java:116) at javax.el.CompositeELResolver.setValue(CompositeELResolver.java:69) at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.setValue(FacesCompositeELResolver.java:182) at org.apache.myfaces.config.ManagedBeanBuilder.initializeProperties(ManagedBeanBuilder.java:268) at org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:92) at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:198) at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:164) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142) at org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:65) ... 34 more Caused by: java.lang.IllegalArgumentException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.el.BeanELResolver.setValue(BeanELResolver.java:108) ... 43 more 


Edit 2: Here's a link to the page that's actually generated: index_jsp.html 编辑2:这是实际生成的页面的链接: index_jsp.html


Any idea? 任何想法? The bean is registered and otherwise working correctly. Bean已注册,否则可以正常工作。 The method delete exists as well. 方法删除也存在。 (The column id's are correct, too) (列ID也是正确的)

Based on the stacktrace, you're using MyFaces. 基于堆栈跟踪,您正在使用MyFaces。 This might be MyFaces specific, I've never seen this on Mojarra, which I'm already using for years. 这可能是MyFaces特有的,我在Mojarra上从未见过,这已经使用了很多年了。

At least, using f:param in a h:commandButton wouldn't have worked on JSF 1.x anyway. 至少,无论如何在h:commandButton使用f:param都不会对JSF 1.x起作用。 It works on h:commandLink only. 它仅适用于h:commandLink On the other hand, you should be wrapping the datatable's value in a DataModel so that you can obtain the row where the button was pressed. 另一方面,应该将数据表的值包装在DataModel以便获得按下按钮的行。 Alternatively, if you're on JSF 1.2, you can also use the f:setPropertyActionListener . 另外,如果您使用的是JSF 1.2,则还可以使用f:setPropertyActionListener You can find examples in this answer . 您可以在此答案中找到示例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM