使用FreeMarker和radio标签,结果当验证失败时,radio的选中项不是保持在选中的项目上,而是回到了默认值。
上面的代码中,默认情况下,user.sex选中项是[b]男[/b],此时选中[b]女[/b],如果输入user.username不合法,验证失败后页面重新回到当前网页时,[b]user.username输入的值可以正常保存[/b],但是user.sex选中的不是[b]女[/b]了,而是回到了默认值[b]男[/b],请问有办法解决这个问题吗?
对应的user Bean代码:
-----------------------------------
哎,大家都回家过中秋节了,自己的问题,自己回答吧。
希望对有此疑问的朋友有所帮助。我的方法,能实现,但总觉得有些丑陋,希望能学到大家实际开发中是如何声明的radio。
两种方法:
1、基于FreeMarker
对user对象进行判断,设定sexValue变量。
然后,在使用radio时,象下面这样声明。
2、基于OGNL,这个好。
用户名:<@s.textfield name="user.username" required="true" />
<br />
性别:
<@s.radio name="user.sex" value="%{'true'}" list=r'#{"true":"男", "false":"女"}' required="true" />
<br />
上面的代码中,默认情况下,user.sex选中项是[b]男[/b],此时选中[b]女[/b],如果输入user.username不合法,验证失败后页面重新回到当前网页时,[b]user.username输入的值可以正常保存[/b],但是user.sex选中的不是[b]女[/b]了,而是回到了默认值[b]男[/b],请问有办法解决这个问题吗?
对应的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" />