2016-06-11 76 views
1

在Struts 2表單中,我遍歷列表並顯示記錄以及複選框,以執行更新/刪除操作。如何獲取Struts 2標記中複選框的選中值<s:checkbox>進入操作類

我的要求是,如果複選框被選中(意思是,如果該值爲真),對所選記錄執行所需操作。但每次我都將複選框的錯誤值輸入到動作類中,並且我沒有將更新的文本字段值獲取到動作類中。

下面是動作,形式和JSP代碼:

// Initial action class to prepare the list to display in jsp 

    public class SetupCategoryMod implements ServletRequestAware, ModelDriven<ManageFundCategoryForm> { 
     private HttpServletRequest request; 
     private ManageFundCategoryForm theForm = new ManageFundCategoryForm(); 
     public String execute() throws Exception { 
      Vector list = doGetFundCatergory(); // This list iam getting fine from DB 
      theForm.setWs(list); // Setting to pojo 
      return "success"; 
     } 
     @Override 
     public void setServletRequest(HttpServletRequest httpServletRequest) { 
      this.request = httpServletRequest; 
     } 
     @Override 
     public ManageFundCategoryForm getModel() { 
      return theForm; 
     } 
    } 

    // POJO for data binding 

    public class ManageFundCategoryForm { 
     private Vector<FundCategoryData> ws; 
     // setter and getter for the property here 
    } 

    // supporting pojo for form binding 

    public class FundCategoryData implements Serializable { 
     private static final long serialVersionUID = 8509788495819453084L; 
     private String fname; 
     private boolean action; 

     //setters and getters for the properties here 
    } 

用jsp更新值提交上述形式後

<s:form action="managefundcategory"> 
    <s:iterator value="ws" status="stat">    
    <tr> 
     <td align="center"><s:checkbox name="ws[%{#stat.index}].action" value="action"/> 
     <td align="center"><s:textfield name="ws[%{#stat.index}].fname" size="26"/> 
    </s:iterator> 
    </s:form> 

動作。但是更新的值不適用於行動。舊值只能再次出現。即使選中複選框,我只獲得了「假」值放入我的動作類

public class ManageFundCategoryAction implements ServletRequestAware, ModelDriven<ManageFundCategoryForm> { 
     private HttpServletRequest request; 
     private ManageFundCategoryForm theForm = new ManageFundCategoryForm(); 
     public String execute() throws Exception {     
      Iterator itr = theForm.getWs().iterator(); 
      while(itr.hasNext()){ //Printing the values to check if the updated values are coming or not. 
       FundCategoryData fdd = (FundCategoryData)itr.next(); 
       System.out.println(fdd.isAction()+" , "+fdd.getFname()); 
      } 

      //send the updated list to db 
      if(update(theForm.getWs()) != 0){ 
       return "success"; 
      } 
     } 
     @Override 
     public ManageFundCategoryForm getModel() { 
      return theForm; 
     } 
     @Override 
     public void setServletRequest(HttpServletRequest httpServletRequest) { 
      this.request = httpServletRequest; 
     } 
    } 

請建議我如何獲得文本框和複選框更新值到提交動作類?

我得到在日誌下面的例外提交表單

20:13:06,846 ERROR [com.opensymphony.xwork2.util.InstantiatingNullHandler] (http-localhost/127.0.0.1:8080-11) Could not create and/or set value back on to object: ognl.OgnlException: ws [java.lang.IllegalArgumentException: [email protected]] 
    at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:83) [ognl-2.6.11.jar:] 
    at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:131) [ognl-2.6.11.jar:] 
    at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68) [xwork-2.0.4.jar:] 
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656) [ognl-2.6.11.jar:] 
    at ognl.ASTProperty.setValueBody(ASTProperty.java:101) [ognl-2.6.11.jar:] 
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177) [ognl-2.6.11.jar:] 
    at ognl.SimpleNode.setValue(SimpleNode.java:246) [ognl-2.6.11.jar:] 
    at ognl.Ognl.setValue(Ognl.java:476) [ognl-2.6.11.jar:] 
    at ognl.Ognl.setValue(Ognl.java:494) [ognl-2.6.11.jar:] 
    at com.opensymphony.xwork2.util.InstantiatingNullHandler.nullPropertyValue(InstantiatingNullHandler.java:106) [xwork-2.0.4.jar:] 
    at ognl.ASTProperty.getValueBody(ASTProperty.java:94) [ognl-2.6.11.jar:] 
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170) [ognl-2.6.11.jar:] 
    at ognl.SimpleNode.getValue(SimpleNode.java:210) [ognl-2.6.11.jar:] 
    at ognl.ASTChain.setValueBody(ASTChain.java:168) [ognl-2.6.11.jar:] 
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177) [ognl-2.6.11.jar:] 
    at ognl.SimpleNode.setValue(SimpleNode.java:246) [ognl-2.6.11.jar:] 
    at ognl.Ognl.setValue(Ognl.java:476) [ognl-2.6.11.jar:] 
    at com.opensymphony.xwork2.util.OgnlUtil.setValue(OgnlUtil.java:186) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.OgnlValueStack.setValue(OgnlValueStack.java:158) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.OgnlValueStack.setValue(OgnlValueStack.java:146) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:193) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:159) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) [struts2-core-2.0.11.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207) [struts2-core-2.0.11.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107) [struts2-core-2.0.11.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206) [struts2-core-2.0.11.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170) [struts2-core-2.0.11.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) [xwork-2.0.4.jar:] 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) [xwork-2.0.4.jar:] 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) [struts2-core-2.0.11.jar:] 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504) [struts2-core-2.0.11.jar:] 
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) [struts2-core-2.0.11.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_101] 
+0

你可以分享你的FormBean和動作類的代碼? –

+0

您是否在您的操作類中獲得了文本框值? –

+0

@AnirtakVarma Formbean不再存在於Struts 2中。 –

回答

1

該解決方案後是顯而易見的。 OGNL級別發生異常。由於您沒有在您的模型中初始化ws屬性,並且createIfNull配置設置爲true(這是默認值),所以OGNL會嘗試爲您實例化一個屬性,但由於它太舊或者不知道如何實例化該屬性,因爲它已知類型。

嘗試的類型更改爲List

private List<FundCategoryData> ws; 
+0

是否意味着OGNL不支持Vector類型? – CMG

+0

它現在工作正常:) – CMG

+0

小心upvote幫助你的答案。 –