2011-01-17 3 views
1

현재 데이터베이스에서 일부 항목을 표시하는 데 데이터 테이블을 사용하고 있습니다. 잘 작동합니다.IllegalArgumentException h : commandButton과 f : param을 h : 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> 

이제는 param-tag가있을 때마다 페이지가로드되지 않습니다. 이 throw되는 예외입니다 :

/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 


편집 2 : 요청 때문에, 나는 (생성 된 페이지에서 볼 수 있듯이) 전체 스택 트레이스를 추가 :
실제로 생성 된 페이지로 연결되는 링크 : index_jsp.html


아이디어가 있으십니까? Bean이 등록되고 올바르게 작동합니다. 메소드 삭제도 존재합니다. (열 id도 정확합니다.)

+0

문제와 관련이 없습니다. JSF 1.x에서는 작동하지 않습니다. 오히려'DataModel # getRowData()'또는'f : setPropertyActionListener'를 사용하십시오. [이 답변] (http://stackoverflow.com/questions/3951263/jsf-command-button-inside-a-jsf-data-table/3951281#3951281)도 참조하십시오. – BalusC

+0

질문을 편집하여 구문 오류 (빨간색 청어로 이어질 수 있음)를 수정하고 전체 스택 추적을 게시하십시오. 그런 다음 적절한 답을 게시 할 수 있습니다. – BalusC

+0

와우 ... 비논리적 인 개념. 그게 왜이 param-tags가있는 이유입니까? 왜냐하면 전체 버튼이 데이터 테이블 외부에 있다면 매개 변수를 올바르게 전송하기 때문에 ... : S DataModel을 사용해 보겠습니다. 감사합니다! 도대체 왜이 * 답장을 추가하지 않았습니까? – Atmocreations

답변

1

Stacktrace를 기반으로 MyFaces를 사용하고 있습니다. 이것은 MyFaces 특정일지도 모릅니다, 나는 Mojarra에서 이것을 본 적이 없습니다. 저는 이미 수년 동안 사용하고 있습니다.

적어도 h:commandButton에서 f:param을 사용하면 어쨌든 JSF 1.x에서 작동하지 않았을 것입니다. h:commandLink에서만 작동합니다. 반면에 단추를 누른 행을 가져올 수 있도록 데이터 테이블의 값을 DataModel에 래핑해야합니다. 또는 JSF 1.2를 사용하는 경우 f:setPropertyActionListener을 사용할 수도 있습니다. 예를 들어 this answer에서 찾을 수 있습니다.

+0

다른 것으로 발견되었습니다 :'h : commandLink'와 함께 작동하지 않아서'f : param' 태그를 다시 제거하려고했습니다. 아직도 작동하지 않습니다.'faces-config.xml'에서 관리 속성을 제거한 경우에만 다시 표가 표시됩니다. – Atmocreations

+0

업데이트 :'h : commandLink' 안에 param과 링크를 표시하도록 관리하면 bean이 어떻게 든 잘못되었습니다. "# {item.courseID}" "는 int로 평가되지만 int 유형의 관리 속성을 가질 수 없습니다. 이로 인해 이전에 발생한 동작이 발생했습니다. 문제는 이제 매개 변수가 전달되지 않은 것으로 보이고 다른 예외로 중단됩니다. 질문을 변경하거나 새 질문을해야합니까? – Atmocreations

+0

어떤 예외가 있습니까? 양식을 표시하는 동안 동일한 데이터 모델 (데이터 테이블의 값 뒤에있는 객체)이 처음 표시되는 동안 그대로 제공되었는지 확인할 수 있습니까? – BalusC

관련 문제