java – Struts 1 ActionForm中的单选按钮没有“已选中”
我有一个包含许多问题的JSP页面和一个带有输入名称和值的Map的ActionForm.
当我加载页面时,未设置无线电输入的值(已检查属性),但复选框是. 表格定义: <bean:define id="form" name="questionForm" type="com.example.QuestionForm"/> 电台(jsp): <html:radio property="<%="boolean(" + questionBase + "V" + respLabel + ")"%>" styleClass="pepperoni1" value="1" >Yes</html:radio> <html:radio property="<%="boolean(" + questionBase + "V" + respLabel + ")"%>" styleClass="pepperoni0" value="0" >No</html:radio> 电台(html): <input type="radio" class="pepperoni1" value="1" name="boolean(pepperoniVNever)">Yes <input type="radio" class="pepperoni0" value="0" name="boolean(pepperoniVNever)">No 复选框(jsp): <html:checkbox property="<%="boolean(" + questionBase + "V" + respLabel + ")"%>" styleClass="pepperoni" /> 复选框(html): <input type="checkbox" class="pepperoni" checked="checked" value="on" name="boolean(pepperoniV1)"> 未设置checked属性,但是当通过getBoolean / setBoolean提交页面加载/表单时,值不为空. 我的ActionForm类有以下可用的相关方法: public void setValue(String key,String value) { if (value != null) values.put(key,value); } public String getValue(String key) { return values.get(key); } public boolean getBoolean(String key) { if (values.get(key) != null){ if(values.get(key).equalsIgnoreCase("1")){ return true; } else if(values.get(key).equalsIgnoreCase("0")){ return false; } return "yes".equalsIgnoreCase(values.get(key)); } return false; } public void setBoolean(String key,boolean value) { if(value){ values.put(key,"yes"); } } 我在Ubuntu 14.04上使用struts 1.2.7,Hibernate 3,DisplayTag 1.0,OpenJDk 6和Tomcat 6. 更新 但是,以下无线电输入可以正常工作(正如您在“已检查”属性中看到的那样: 电台(jsp): <html:radio property="<%="value(" + questionBase + "B)"%>" value="No">No</html:radio> <html:radio property="<%="value(" + questionBase + "B)"%>" value="Yes">Yes</html:radio> 电台(html): <input name="value(noteB)" value="Yes" checked="checked" type="radio"> <input name="value(noteB)" value="No" type="radio"> 但是在使用boolean编辑输入以使用值之后,仍然没有在加载时设置checked属性. 更新(5/10/15) 在进行了shinjw推荐的更改之后,值被正确保存(这是一个单独的问题)但是当getBoolen返回true时,仍然没有为某些单选按钮设置checked属性. 解决方法
首先,布尔只有真或假.不是0或1
<html:radio property="<%="boolean(" + questionBase + "V" + respLabel + ")"%>" styleClass="pepperoni1" value="true" >Yes</html:radio> <html:radio property="<%="boolean(" + questionBase + "V" + respLabel + ")"%>" styleClass="pepperoni0" value="false" >No</html:radio> 最好使用autoboxed布尔对象而不是布尔值.以这种方式,必须将值设置为布尔值,以使其包含值. 这样做还会在您的代码中显示出一个逻辑问题. public void setBoolean(String key,boolean value) { values.put(key,value ? "yes" : ""); } 当您的布尔值总是设置为false时,您认为可能会发生什么? 这样的事情可能会成为更好的解决方案 Map<String,Boolean> values = new Hashmap<String,Boolean> public void setBoolean(String key,Boolean value) { values.put(key,value); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |