未选中迭代器生成的单个复选框不起作用 [英] Single checkbox generated with iterator not working while it is not checked

查看:66
本文介绍了未选中迭代器生成的单个复选框不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Struts2测试应用程序之一中,我使用了类似iterator的标记创建了多个复选框

In one of my Struts2 test application, I created multiple checkboxes using iterator tag like

<s:iterator value="valueAddedServicesMap">
   <s:checkbox name="reportData.valueAddedServices"  id="valueAddedServices" fieldValue="%{key}" value="%{key in reportData.valueAddedServices}"/>&nbsp;<s:property value="value"/><br/>
</s:iterator>

其中valueAddedServicesMap是具有键值对(例如{"1","VAS 1"},{"2","VAS 2"})的映射,并且我具有List< Long>在reportData.valueAddedServices的活动类中

where valueAddedServicesMap is a map having key-value pairs like {"1", "VAS 1"}, {"2", "VAS 2"} and I have List<Long> in action class for reportData.valueAddedServices

如果有多个复选框,则可以正常工作.它会使用与选中的复选框相关联的值来填充活动列表,如果未选中任何复选框,则将其保留为空.

In case of more than one checkboxes it is working fine. It populates list in action with values associated wit selected checkboxes or keeps it null if no checkbox is selected.

如果仅显示一个复选框并被选中,它也会填充单个值,但是当仅显示一个复选框且未被选中时,它将给出异常.

It is also populating single value in case of only one checkbox to dispaly and it is selected but it gives exception while only one checkbox to display and it is not selected.

例外就像:

[09 May 2013 10:48:45,081] [DEBUG] unable to convert value using type converter  [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter]
Unparseable number: "false" at position 0 - [unknown location]
at   com.opensymphony.xwork2.conversion.impl.NumberConverter.convertValue(NumberConverter.java:41)
at com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter.doConvertToNumber(XWorkBasicConverter.java:213)
at com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter.convertValue(XWorkBasicConverter.java:116)
at com.opensymphony.xwork2.conversion.impl.XWorkConverter.convertValue(XWorkConverter.java:340)
at com.opensymphony.xwork2.ognl.OgnlTypeConverterWrapper.convertValue(OgnlTypeConverterWrapper.java:39)
at com.opensymphony.xwork2.ognl.XWorkTypeConverterWrapper.convertValue(XWorkTypeConverterWrapper.java:36)
at com.opensymphony.xwork2.conversion.impl.CollectionConverter.convertValue(CollectionConverter.java:54)
at com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter.doConvertToCollection(XWorkBasicConverter.java:197)
at com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter.convertValue(XWorkBasicConverter.java:110)
at com.opensymphony.xwork2.conversion.impl.XWorkConverter.convertValue(XWorkConverter.java:340)
at com.opensymphony.xwork2.ognl.OgnlTypeConverterWrapper.convertValue(OgnlTypeConverterWrapper.java:39)
at ognl.OgnlRuntime.getConvertedType(OgnlRuntime.java:1064)
at ognl.OgnlRuntime.getConvertedTypes(OgnlRuntime.java:1081)
at ognl.OgnlRuntime.getConvertedMethodAndArgs(OgnlRuntime.java:1107)
at ognl.OgnlRuntime.getAppropriateMethod(OgnlRuntime.java:1193)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1207)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1478)
at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2315)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.ASTChain.setValueBody(ASTChain.java:227)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:217)
at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:186)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:173)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:151)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:317)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:228)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.test.app.web.interceptor.AuthenticationInterceptor.intercept(AuthenticationInterceptor.java:48)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)

在此问题上的任何帮助将不胜感激

any help on this issue would be greatly appreciated

推荐答案

如果只有一个复选框并且未选中,则Struts2(以防万一)设置false值. 您可以通过在checkbox拦截器配置中设置setUncheckedValue来定制将设置的默认值.

If it is only one checkbox and it isn't checked, Struts2 (just in case) sets false value. You can customize what default value will be set by setting setUncheckedValue in checkbox interceptor configuration.

此功能也有解决方法.它将添加带有复选框名称以__checkbox_为前缀的隐藏字段.那么它将不会是单个复选框,并且不会提交false.

Also there is a workaround to this feature. It is to add hidden field with your checkbox name prefixed with __checkbox_ to the form. Then it won't be single checkbox and false will not be submitted.

<s:hidden name="__checkbox_YOUR-CHECKBOX-NAME"/>

这篇关于未选中迭代器生成的单个复选框不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆