Struts 2中验证失败后,radio回复到默认值的有关问题
Struts 2中验证失败后,radio回复到默认值的问题
使用FreeMarker和radio标签,结果当验证失败时,radio的选中项不是保持在选中的项目上,而是回到了默认值。
上面的代码中,默认情况下,user.sex选中项是男,此时选中女,如果输入user.username不合法,验证失败后页面重新回到当前网页时,user.username输入的值可以正常保存,但是user.sex选中的不是女了,而是回到了默认值男,请问有办法解决这个问题吗?
对应的user Bean代码:
-----------------------------------
哎,大家都回家过中秋节了,自己的问题,自己回答吧。
希望对有此疑问的朋友有所帮助。我的方法,能实现,但总觉得有些丑陋,希望能学到大家实际开发中是如何声明的radio。
两种方法:
1、基于FreeMarker
对user对象进行判断,设定sexValue变量。
然后,在使用radio时,象下面这样声明。
2、基于OGNL,这个好。
使用FreeMarker和radio标签,结果当验证失败时,radio的选中项不是保持在选中的项目上,而是回到了默认值。
用户名:<@s.textfield name="user.username" required="true" /> <br /> 性别: <@s.radio name="user.sex" value="%{'true'}" list=r'#{"true":"男", "false":"女"}' required="true" /> <br />
上面的代码中,默认情况下,user.sex选中项是男,此时选中女,如果输入user.username不合法,验证失败后页面重新回到当前网页时,user.username输入的值可以正常保存,但是user.sex选中的不是女了,而是回到了默认值男,请问有办法解决这个问题吗?
对应的user Bean代码:
public class User implements Serializable { private String username; private String password; private boolean sex;
-----------------------------------
哎,大家都回家过中秋节了,自己的问题,自己回答吧。
希望对有此疑问的朋友有所帮助。我的方法,能实现,但总觉得有些丑陋,希望能学到大家实际开发中是如何声明的radio。
两种方法:
1、基于FreeMarker
对user对象进行判断,设定sexValue变量。
<#if user?exists> <#assign sexValue = user.sex?default('true')?string /> <#else> <#assign sexValue = 'true' /> </#if>
然后,在使用radio时,象下面这样声明。
<@s.radio name="user.sex" value="${sexValue}" list=r'#{"true":"男", "false":"女"}' required="true" />
2、基于OGNL,这个好。
<@s.radio name="user.sex" value="%{user == null || user.sex == null ? 'true' : user.sex}" list=r'#{"true":"男", "false":"女"}' required="true" />
1 楼
netfork
2008-09-13
哎,大家都回家过中秋节了,自己的问题,自己回答吧。
希望对有此疑问的朋友有所帮助。我的方法,能实现,但总觉得有些丑陋,希望能学到大家实际开发中是如何声明的radio。
两种方法:
1、基于FreeMarker
对user对象进行判断,设定sexValue变量。
然后,在使用radio时,象下面这样声明。
2、基于OGNL,这个好。
希望对有此疑问的朋友有所帮助。我的方法,能实现,但总觉得有些丑陋,希望能学到大家实际开发中是如何声明的radio。
两种方法:
1、基于FreeMarker
对user对象进行判断,设定sexValue变量。
<#if user?exists> <#assign sexValue = user.sex?default('true')?string /> <#else> <#assign sexValue = 'true' /> </#if>
然后,在使用radio时,象下面这样声明。
<@s.radio name="user.sex" value="${sexValue}" list=r'#{"true":"男", "false":"女"}' required="true" />
2、基于OGNL,这个好。
<@s.radio name="user.sex" value="%{user == null || user.sex == null ? 'true' : user.sex}" list=r'#{"true":"男", "false":"女"}' required="true" />
2 楼
usherlight
2008-09-15
我觉得你应该在struts.xml中,调整一下param和validate这两个interceptor的顺序,如果先执行param这个interceptor的话,在验证失败之前, user的sex已经被赋了值的话,应该能解决你的问题
3 楼
netfork
2008-09-15
问题是我想在单选框中,有一个被默认选中的。
当页面第一次打开时,不应执行Validate的,此时要求单选框中,有一个被默认选中。
所以,Validate是拦不住的。
当页面第一次打开时,不应执行Validate的,此时要求单选框中,有一个被默认选中。
所以,Validate是拦不住的。
4 楼
usherlight
2008-09-16
那更简单了,修改一下User类,给字段sex赋一个初值就行了。
private boolean sex = true;
private boolean sex = true;
5 楼
netfork
2008-09-16
当页面初次打开时,User类对象还是null,将User类的sex属性设为true根本不管用的啊。
6 楼
usherlight
2008-09-26
那么必杀技是:
<@s.radio name="user.sex" value="%{'true'}" list=r'#{"true":"男", "false":"女"}' required="true" value="true"/>
<@s.radio name="user.sex" value="%{'true'}" list=r'#{"true":"男", "false":"女"}' required="true" value="true"/>
7 楼
ztroma
2008-09-27
用你的Action里面覆盖掉validate()方法,验证失败后会执行这个方法的,如果你在这个方法里面覆值,验证失败后是可以保留的!
8 楼
leisure
2008-09-30
或者可以实现preparable接口 ,也可以在验证失败后做些事情
9 楼
lph128998
2008-12-11
第2种基于OGNL的方式的经常用到的,比较好