Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向h:dataTable添加带有f:param的h:commandButton时出现IllegalArgumentException_Java_Jsf_Tomcat_Datatable_Myfaces - Fatal编程技术网

Java 向h:dataTable添加带有f:param的h:commandButton时出现IllegalArgumentException

Java 向h:dataTable添加带有f:param的h:commandButton时出现IllegalArgumentException,java,jsf,tomcat,datatable,myfaces,Java,Jsf,Tomcat,Datatable,Myfaces,目前,我正在使用datatable显示数据库中的一些项。很好 <h:dataTable border="1" value="#{overviewBean.loadContent }" var="item" first="0" > <h:column id="column1"> <f:facet name="header"> <h:outputText value="#{messages.overviewSu

目前,我正在使用datatable显示数据库中的一些项。很好

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

编辑:由于请求,我添加了整个stacktrace(如生成的页面所示):


编辑2:这里有一个链接,指向实际生成的页面:


有什么想法吗?
bean已注册,并且在其他方面工作正常。方法delete也存在。(列id也正确)

根据stacktrace,您使用的是MyFaces。这可能是MyFaces特有的,我在Mojarra上从未见过,我已经用了很多年了


至少,在
h:commandButton
中使用
f:param
无论如何在JSF1.x上都不会起作用。它仅适用于
h:commandLink
。另一方面,您应该将数据表的值包装在
DataModel
中,以便获得按下按钮的行。或者,如果您使用的是JSF1.2,也可以使用
f:setPropertyActionListener
。您可以在中找到示例。

基于stacktrace,您正在使用MyFaces。这可能是MyFaces特有的,我在Mojarra上从未见过,我已经用了很多年了



至少,在
h:commandButton
中使用
f:param
无论如何在JSF1.x上都不会起作用。它仅适用于
h:commandLink
。另一方面,您应该将数据表的值包装在
DataModel
中,以便获得按下按钮的行。或者,如果您使用的是JSF1.2,也可以使用
f:setPropertyActionListener
。您可以在.

中找到与问题无关的示例:这在JSF 1.x上不起作用。而是使用
DataModel#getRowData()
f:setPropertyActionListener
。另请参见。请编辑您的问题以修复语法错误(这可能会导致误会),并发布整个stacktrace。然后我们可以发布一个合适的答案。哇。。。多么不合逻辑的概念啊。这就是为什么这些param标签是用来的,对吧?因为如果整个按钮都在数据表之外,那么它会正确地传输参数…:S将尝试使用数据模型,谢谢!你为什么不加上这个作为回复?因为这样就不会抛出一个
IllegalArgumentException
。请编辑您的问题以包含整个stacktrace。这很可能是由完全不同的模拟引起的。至于不合逻辑之处,
f:param
最初的目的是向
h:outputLink
h:commandLink
的URL添加请求参数。这在JSF2.0中是“固定”的,可以在
h:commandButton
中工作,因为有很多“不合逻辑”的抱怨:)谢谢。当你只添加一行,然后打开页面时,你真的得到了这个吗?换句话说,当您删除这一行时,它会显示良好?stacktrace一点也不暗示这一点。如果点击了命令按钮(EL中的空格并不是罪魁祸首),它实际上会被抛出。这与问题无关:这对JSF 1。x不起作用。而是使用
DataModel#getRowData()
f:setPropertyActionListener
。另请参见。请编辑您的问题以修复语法错误(这可能会导致误会),并发布整个stacktrace。然后我们可以发布一个合适的答案。哇。。。多么不合逻辑的概念啊。这就是为什么这些param标签是用来的,对吧?因为如果整个按钮都在数据表之外,那么它会正确地传输参数…:S将尝试使用数据模型,谢谢!你为什么不加上这个作为回复?因为这样就不会抛出一个
IllegalArgumentException
。请编辑您的问题以包含整个stacktrace。这很可能是由完全不同的模拟引起的。至于不合逻辑之处,
f:param
最初的目的是向
h:outputLink
h:commandLink
的URL添加请求参数。这在JSF2.0中是“固定”的,可以在
h:commandButton
中工作,因为有很多“不合逻辑”的抱怨:)谢谢。当你只添加一行,然后打开页面时,你真的得到了这个吗?换句话说,当您删除这一行时,它会显示良好?stacktrace一点也不暗示这一点。如果点击了命令按钮(而EL中的空格并不是罪魁祸首),它实际上会被抛出。找到其他的东西:不适用于<代码> h:命令链接< /代码>,这也使我试图再次删除<代码>:PARAM < /代码>标签。还是不行。只有当我从
faces config.xml
中删除托管属性时,它才会再次显示表。更新:managed要显示
h:commandLink
中带有参数的链接,bean不知何故是错误的。虽然“
#{item.courseID}
”的计算结果为int,但我无法拥有int类型的托管属性。这导致了前面看到的行为。现在的问题似乎是参数没有被传递,而是由于另一个异常而中止。我应该改变问题还是打开一个新问题?哪一个例外?您能否确保表单提交期间提供的数据模型(datatable值后面的对象)与初始显示期间的数据模型相同?请稍后再试。它是一个托管bean,作用域为
request
,应该可以工作,因为所有的值都是传递的,对吗?这里出现异常:“调用id为j_id_jsp_1372441331_1的组件的操作方法时出错:j_id_jsp_1372441331_3:8:j_id_jsp_1372441331_42原因:java.lang.NumberFormatException-null”确定,数据模型未被保留。归根结底,您需要确保
#{overviewBean.loadContent}
在表单提交请求期间返回相同的值。这是详细的回答。找到了一些
/overview.jsp(15,1) '#{overviewBean.loadContent }' java.lang.IllegalArgumentException
Caused by:
java.lang.IllegalArgumentException - java.lang.IllegalArgumentException
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