`
netfork
  • 浏览: 480319 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Struts 2中验证失败后,radio回复到默认值的问题

阅读更多
使用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" />
分享到:
评论
10 楼 bo_hai 2014-02-24  
netfork 写道
哎,大家都回家过中秋节了,自己的问题,自己回答吧。
希望对有此疑问的朋友有所帮助。我的方法,能实现,但总觉得有些丑陋,希望能学到大家实际开发中是如何声明的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" />


非常好,学习了。解决了我的问题。
9 楼 lph128998 2008-12-11  
第2种基于OGNL的方式的经常用到的,比较好
8 楼 leisure 2008-09-30  
或者可以实现preparable接口 ,也可以在验证失败后做些事情
7 楼 ztroma 2008-09-27  
用你的Action里面覆盖掉validate()方法,验证失败后会执行这个方法的,如果你在这个方法里面覆值,验证失败后是可以保留的!
6 楼 usherlight 2008-09-26  
那么必杀技是:
<@s.radio name="user.sex" value="%{'true'}" list=r'#{"true":"男", "false":"女"}' required="true" value="true"/>
5 楼 netfork 2008-09-16  
当页面初次打开时,User类对象还是null,将User类的sex属性设为true根本不管用的啊。
4 楼 usherlight 2008-09-16  
那更简单了,修改一下User类,给字段sex赋一个初值就行了。

private boolean sex = true;
3 楼 netfork 2008-09-15  
问题是我想在单选框中,有一个被默认选中的。
当页面第一次打开时,不应执行Validate的,此时要求单选框中,有一个被默认选中。
所以,Validate是拦不住的。
2 楼 usherlight 2008-09-15  
我觉得你应该在struts.xml中,调整一下param和validate这两个interceptor的顺序,如果先执行param这个interceptor的话,在验证失败之前, user的sex已经被赋了值的话,应该能解决你的问题
1 楼 netfork 2008-09-13  
哎,大家都回家过中秋节了,自己的问题,自己回答吧。
希望对有此疑问的朋友有所帮助。我的方法,能实现,但总觉得有些丑陋,希望能学到大家实际开发中是如何声明的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" />

相关推荐

Global site tag (gtag.js) - Google Analytics