在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]
你可以分享你的FormBean和動作類的代碼? –
您是否在您的操作類中獲得了文本框值? –
@AnirtakVarma Formbean不再存在於Struts 2中。 –