Struts2单选按钮详解及枚举类型的转换代码示例

本文研究的主要是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){
			/*把value强转为数组类型*/
			String[] params = (String[]) value;
			return Gender.valueOf(params[0]);
		} else if (toType == String.class){
			/*从后台action传到前台,即Gender类型转换为String类型 */
			/*把value强转为Gender*/
			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单选按钮详解及枚举类型的转换代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • 关于Struts2的类型转换详解
  • 如何解决struts2日期类型转换
  • Struts2开发 基本配置与类型转换
  • 一篇文章搞定Struts2的类型转换
  • struts2中类型转换实例代码
  • Struts2学习教程之自定义类型转换器的方法
时间: 2018-02-06

一篇文章搞定Struts2的类型转换

前言 我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种.所以,我们需要类型转换!下面来看看详细的介绍吧. 一.类型转换的意义 所有的MVC框架,解决的都是表现层的解决方案,都需要收集用户请求参数,并把参数提供给控制器.但是,在Web应用中所有的请求参数都是字符串类型的,Java是强类型的语言,如何将字符串转换为Java类型,这是框架要解决的一个问题. 例如,一个注册页需要输入年龄.日期等.这时候就需要将日期.年龄字符串转换为相应类型. 二.Str

struts2中类型转换实例代码

类型转换 所有的页面与控制器传递的数据都是String类型,在对其进行处理时可能会用到各种的数据类型,程序无法自动完成数据类型的转换,这就需要我们在代码中进行手手动操作,这个过程就称为类型转换. 内置类型转换器 在Web应用程序中,用户在视图层输入的数据都是字符串,业务控制层在处理这些数据时,就必须把从视图层传递过来的字符串进行类型转换.Struts2提供了简单易用的数据类型转换机制,struts2提供的类型转换如下: 1)String:将int.long.double.boolean.Stri

Struts2开发 基本配置与类型转换

一.Action配置中的各项默认值 <package name="csdn" namespace="/test" extends="struts-default">        <action name="helloworld" class="cn.csdn.action.HelloWorldAction" method="execute" > <resu

关于Struts2的类型转换详解

一.类型转换的意义 对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构应用的请求参数是通过浏览器发送到服务器的,这些参数不可能有丰富的数据类型,因此必须在服务器端完成数据类型的转换 MVC框架是一个表现层解决方案,理应提供类型转换的支持,Struts2提供了功能非常强大的类型转换支持. 二.表现层数据的处理 1.对于web应用而言,表现层主要用于与用户交互,包括收集用户输入数据,向用户呈现服务器的状态.因此表现层的数据的流向主要有两个方向:输入数据和输出数

Struts2学习教程之自定义类型转换器的方法

前言 为什么要在struts2中类型转换器? :struts2 只能够对java中的8种原态类型以及String.Date等常用类型提供自动转换. 但是这绝对不能满足我们的需求,如果我们想将页面的数据整合成一个javabean.到Action中去时Action得到的是一个对象,那么这个需求就需要我们使用类型转换器. 大部分时候,使用Struts2框架提供的内建的类型转换器和基于OGNL的类型转换器,就能满足大部分的类型转换需求:但是也存在一些特殊的情况下,可能需要将一个指定格式的字符串转换成一个

如何解决struts2日期类型转换

因此要想保证系统一定要正确第对Date类型进行转换,就要写一个全局的类型转换类,进行Date与String之间的类型转换. 复制代码 代码如下: package com.great.util; import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map; import com.opensymphony.xwork2.conversion.impl.

解决easyui日期时间框ie的兼容的问题

前几天项目进入最后准备上线阶段,测试突然发现使用easyui的datetimebox插件获取的时间在ie的时候无法获取到比当前时间还往后的时间,当时是这么写的: $(selector).datetimebox( { formatter : function(date) { var y = date.getFullYear(); var m = date.getMonth() + 1; var d = date.getDate(); var h = date.getHours(); //获取当前小

解决json日期格式问题的3种方法

开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下所示: 复制代码 代码如下: //设置服务器响应的结果为纯文本格式            context.Response.ContentType = "text/plain";           //学生对象集合            List<Student> students = new List<St

java字符串与日期类型转换的工具类

常用的字符串转date,和日期转字符串的方法,具体内容如下 package com.cq2022.zago.base.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import javax.xml.datatype.Dat

SpringMVC日期类型接收空值异常问题解决方法

最近遇到SpringMVC写个controller类,传一个空串的字符类型过来,正常情况是会自动转成date类型的,因为数据表对应类类型就是date的 解决方法是在controller类的后面加个注解: @InitBinder protected void initDateFormatBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); binde