时间:2021-05-20
本文研究的主要是Struts2框架单选按钮详解及枚举类型的转换的相关示例,具体如下。
使用struts2标签,毫无疑问要先引入标签库:
<%@ taglib prefix="s" uri="/struts-tags"%>假设radio单选框中List的值为一个Map集合:
<s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="'MAN'" theme="simple"/>注:
1.name属性还是对应HTML代码的name属性。
2.listKey属性对应HTML代码的value属性。
3.listValue属性对应HTML代码label标签属性。
4.value属性是指:当value的值和集合中的值匹配时就选中(如果value的值为字符串时要加上单引号)。
执行后会解析为html代码,如图:
下面我们通过一个案例来说明:
修改用户的时候,跳转到修改界面,在修改界面要回显用户的性别,这里性别我们使用枚举来表示。
最开始的用户界面:
项目结构:
用户界面:
<body> <form action="enumAction_test.action" method="post"> 请选择性别: <s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="'MAN'" theme="simple"/> <input type="submit" value="提交"> </form> </body>后台action代码:
public class EnumAction { private Gender gender = Gender.MAN; public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } public String test(){ return "success"; }}注:因为我们使用的是枚举类型,所以要进行类型转换(具体转换方法在前面的博客中有提到)。
枚举类型转换类代码:
public class EnumTypeConverter extends DefaultTypeConverter { @SuppressWarnings("rawtypes") @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { if (toType == Gender.class){ String[] params = (String[]) value; return Gender.valueOf(params[0]); } else if (toType == String.class){ Gender gender = (Gender) value; return gender.toString(); } return null; }}定义全局类型转的属性文件:
com.lixue.bean.Gender=com.lixue.converter.EnumTypeConverter跳转后的结果页面(用户修改界面):
<body> 您的性别:<s:radio list="#{'MAN':'男','WOMEN':'女'}" name="gender" listKey="key" listValue="value" value="gender" theme="simple"/> </body>注:在修改界面是如何实现用户当前所选性别的回显呢?关键是看value值,上述代码中的value我就写了一个gender,其实这个gender是在action中定义的一个属性,上一篇文章我们讲OGNL的时候就说过,action中的属性会保存在值栈中,我们取值栈中的属性,直接通过属性名称就可以获取,不需要通过#命名空间的形式获取。获取完然后和前面的map集合进行匹配,判断是否勾选。
1.有人可能会有疑问,为什么listKey可以直接写上key,listValue可以直接写value。
解答:struts2在解析<s:radio>标签中的那个list集合时,使用的是Iterator,iterator的功能是每次循环都会将结果(每次获取一个Entry对象)保存在值栈的栈顶,所以通过OGNL表达式取值的时候,直接通过对象的属性(Entry的属性名称为key和value)名称来取值即可,不需要使用#命名空间的方式,不明白OGNL表达式的同学可以看上一篇文章。
2.我们会发现在写标签的时候我们总会写theme这个属性,这个属性的功能是为了避免struts2在解析标签的时候,生成一些不必要的代码,但是每次都要写,岂不是很坑爹,其实我们可以在struts.xml文件中配置一个常量就可以达到效果:
<!--struts2标签主题样式--> <constant name="struts.ui.theme" value="simple" />这几篇Struts框架的学习,颇有几分拨开云雾见青天之感,对于Java框架,算是有了比较清晰的了解,spring,mybatis等,诸如此类,万法相通。。。
以上就是本文关于Struts2单选按钮详解及枚举类型的转换代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
详解Struts2中Action访问ServletAPI的几种方法在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于
这篇文章主要介绍了spring整合struts2过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下首先将
本文实例为大家分享了struts2实现多文件上传的具体代码,供大家参考,具体内容如下首先搭建好struts2的开发环境,导入struts2需要的最少jar包新建
详解struts2的token机制和cookie来防止表单重复提交今天在做一个投票系统时要实现防止表单重复提交!当时就想到了用struts2提供的token机制
首先是搭建Struts2环境。第一步下载Struts2去Struts官网http://struts.apache.org/下载Struts2组件。截至目前,st