Struts2单选按钮详解及枚举类型的转换代码示例
什么是单选按钮
单选按钮是一种常见的选项表单元素,通常用于让用户在多个选项中选择一个。在Struts2中,通过使用<s:radio>
标签可以轻松地创建单选按钮,并且支持流行的UI框架,如Bootstrap和jQuery UI。
Struts2中的单选按钮标签
在Struts2中,单选按钮通过<s:radio>
标签实现。这个标签有三个关键属性:
name
:请求参数的名称list
:单选按钮选项的列表(可以是一个Map或者一个List)value
:默认选中的选项的值
下面是一个简单的示例,创建一个由两个单选按钮组成的表单:
<s:radio name="gender" list="{'Male', 'Female'}" value="Male"/> Male
<s:radio name="gender" list="{'Male', 'Female'}" value="Female"/> Female
这个示例创建了一个由两个单选按钮组成的表单,请求参数名称为gender
,默认选中的选项是Male
。
枚举类型的转换
在实际开发过程中,有时候需要把枚举类型的值从请求参数中转换成对应的枚举类型。Struts2提供了一个方便的转换器,可以帮你完成这个过程。
例如,我们有一个枚举类型Gender
,代表性别:
public enum Gender {
MALE("M"), FEMALE("F");
private String value;
Gender(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
如果我们需要从一个单选按钮中获取性别信息,可以这样编写Action类:
public class ExampleAction extends ActionSupport {
private Gender gender;
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
在Struts2的配置文件中需添加以下配置:
<constant name="struts.conversion.useDefaultTypeConverters" value="true"/>
<package name="example" namespace="/" extends="struts-default">
<action name="submit" class="example.ExampleAction" method="execute">
<result>/result.jsp</result>
</action>
<global-results>
<result name="input">/index.jsp</result>
</global-results>
<interceptors>
<interceptor-stack name="genderInterceptor">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="basicStack"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="params">
<param name="excludeParams">\w*.(class|jar)</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="genderInterceptor"/>
<type-conversion>
<key-property>.*\.gender</key-property> <!-- 对名字以".gender"结尾的属性使用Gender类型转换器 -->
<converter class="example.GenderConverter"/>
</type-conversion>
</package>
可以看到在上述配置中,我们添加了一个type-conversion元素,它通过一个key-property元素指定了对哪些属性进行类型转换操作,并且指定了转换器的类名。这样,在向Action提交表单时,Struts2就会将请求参数中的值转换成对应的枚举类型。
下面是一个简单的GenderConverter实现,用于把请求参数转换成Gender枚举类型的值:
public class GenderConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toType) {
String value = values[0];
if ("M".equals(value)) {
return Gender.MALE;
} else if ("F".equals(value)) {
return Gender.FEMALE;
} else {
throw new TypeConversionException("Invalid value for Gender: " + value);
}
}
@Override
public String convertToString(Map context, Object o) {
if (o instanceof Gender) {
Gender gender = (Gender) o;
return gender.getValue();
} else {
throw new TypeConversionException("Invalid type for Gender: " + o.getClass());
}
}
}
这个转换器很简单,它将请求参数中的值转换成对应的Gender枚举类型对象。注意,我们实现了convertToString()
方法,这是因为任何类型转换器都必须同时支持从Java对象到字符串的转换。
示例1:使用Bootstrap样式的单选按钮
在实际开发中,经常需要使用样式更丰富的单选按钮。Bootstrap是一种非常流行的Web UI框架,提供了许多样式优美的组件,包括单选按钮。下面我们来演示如何在Struts2中使用Bootstrap样式的单选按钮。
首先,在Web项目中导入Bootstrap的CSS和JavaScript资源文件。然后,我们可以使用Bootstrap提供的CSS样式来美化我们的单选按钮:
<label class="radio-inline">
<s:radio name="gender" list="{'M': 'Male', 'F': 'Female'}" value="M" cssClass="bootstrap"/>
Male
</label>
<label class="radio-inline">
<s:radio name="gender" list="{'M': 'Male', 'F': 'Female'}" value="F" cssClass="bootstrap"/>
Female
</label>
在这个例子中,我们通过cssClass
属性来指定单选按钮所使用的CSS样式,这样就可以使用Bootstrap提供的样式了。
示例2:使用jQuery UI样式的单选按钮
除了Bootstrap之外,还有其他一些流行的Web UI框架,如jQuery UI。如果你想为你的单选按钮选择jQuery UI的样式,该怎么做呢?
首先,在Web项目中导入jQuery UI的CSS和JavaScript资源文件。然后,在使用<s:radio>
标签时,通过template
属性来指定单选按钮的HTML模板:
<s:radio name="gender" list="{'M': 'Male', 'F': 'Female'}" value="M"
template="<label for='s_gender_%{#attr.name}_%{#attr.list[#attr.status.index]}'>%{#attr.list[#attr.status.index]}<input type='radio' name='%{#attr.name}' value='%{#attr.list[#attr.status.index]}' id='s_gender_%{#attr.name}_%{#attr.list[#attr.status.index]}' class='ui-helper-hidden-accessible'></label>"/>
在这个例子中,我们通过template
属性来指定单选按钮的HTML模板,通过ui-helper-hidden-accessible
这个class来隐藏默认的单选按钮,然后使用label
元素来模拟单选按钮并设置jQuery UI的相关样式。
总结
Struts2提供了强大的单选按钮支持,可以快速创建HTML表单,并且支持流行的UI框架。同时,Struts2还提供了方便的类型转换器,可以帮助我们将请求参数转换成对应的Java对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2单选按钮详解及枚举类型的转换代码示例 - Python技术站