在Spring MVC中, <form:radiobutton />用于呈现HTML单选按钮,并且单选按钮值在JSP页面内进行了硬编码。 当<form:radiobuttons />用于呈现多个单选按钮时,单选按钮的值将在运行时生成。
在本教程中,我们向您展示如何使用<form:radiobutton />和<form:radiobuttons /> 。
1. <form:radiobutton />
生成一个单选按钮,并对值进行硬编码。
public class Customer{
String sex;
//...
}
<form:radiobutton path="sex" value="M"/>Male
<form:radiobutton path="sex" value="F"/>Female
默认值…
要将上面的单选按钮中的“ 男性 ”作为默认选择值,只需将“ 性别 ”属性设置为“ M ”,例如:public class Customer{ String sex = "M"; //... }
要么
//SimpleFormController... @Override protected Object formBackingObject(HttpServletRequest request) throws Exception { Customer cust = new Customer(); //Make "Male" as the default radio button selected value cust.setSex("M"); return cust; }
2. <form:radiobuttons />
生成多个单选按钮,并在运行时生成值。
//SimpleFormController...
protected Map referenceData(HttpServletRequest request) throws Exception {
Map referenceData = new HashMap();
List<String> numberList = new ArrayList<String>();
numberList.add("Number 1");
numberList.add("Number 2");
numberList.add("Number 3");
numberList.add("Number 4");
numberList.add("Number 5");
referenceData.put("numberList", numberList);
return referenceData;
}
<form:radiobuttons path="favNumber" items="${numberList}" />
默认值…
要在上述单选按钮中将“ 数字1 ”作为默认选择值,只需将“ favNumber ”属性设置为“ 数字1 ”,例如:public class Customer{ String favNumber = "Number 1"; //... }
要么
//SimpleFormController... @Override protected Object formBackingObject(HttpServletRequest request) throws Exception { Customer cust = new Customer(); //Make "Number 1" as the default radio button selected value cust.setFavNumber("Number 1") return cust; }
注意
对于单选按钮选择,只要“ 路径 ”或“ 属性 ”等于“ 单选按钮值 ”,就会自动选择单选按钮。
全单选按钮示例
我们来看一个完整的Spring MVC单选按钮示例:
1.型号
用于存储单选按钮值的客户模型类。
文件:Customer.java
package com.mkyong.customer.model;
public class Customer{
String favNumber;
String sex;
public String getFavNumber() {
return favNumber;
}
public void setFavNumber(String favNumber) {
this.favNumber = favNumber;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2.控制器
一个SimpleFormController
用于处理表单单选按钮的值。 将单选按钮“ M”设置为默认选择值。
文件:RadioButtonController.java
package com.mkyong.customer.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import com.mkyong.customer.model.Customer;
public class RadioButtonController extends SimpleFormController{
public RadioButtonController(){
setCommandClass(Customer.class);
setCommandName("customerForm");
}
@Override
protected Object formBackingObject(HttpServletRequest request)
throws Exception {
Customer cust = new Customer();
//Make "Make" as default radio button checked value
cust.setSex("M");
return cust;
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
Customer customer = (Customer)command;
return new ModelAndView("CustomerSuccess","customer",customer);
}
protected Map referenceData(HttpServletRequest request) throws Exception {
Map referenceData = new HashMap();
List<String> numberList = new ArrayList<String>();
numberList.add("Number 1");
numberList.add("Number 2");
numberList.add("Number 3");
numberList.add("Number 4");
numberList.add("Number 5");
referenceData.put("numberList", numberList);
return referenceData;
}
}
3.验证者
一个简单的表单验证器,可确保选中“ 性别 ”和“ 数字 ”单选按钮。
文件:RadioButtonValidator.java
package com.mkyong.customer.validator;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.mkyong.customer.model.Customer;
public class RadioButtonValidator implements Validator{
@Override
public boolean supports(Class clazz) {
//just validate the Customer instances
return Customer.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Customer cust = (Customer)target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "sex", "required.sex");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "favNumber", "required.favNumber");
}
}
文件:message.properties
required.sex = Please select a sex!
required.favNumber = Please select a number!
4.查看
一个JSP页面,显示Spring的表单标签<form:radiobutton />和<form:radiobuttons />的用法。
文件:CustomerForm.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<style>
.error {
color: #ff0000;
}
.errorblock {
color: #000;
background-color: #ffEEEE;
border: 3px solid #ff0000;
padding: 8px;
margin: 16px;
}
</style>
</head>
<body>
<h2>Spring's form radio button example</h2>
<form:form method="POST" commandName="customerForm">
<form:errors path="*" cssClass="errorblock" element="div" />
<table>
<tr>
<td>Sex :</td>
<td><form:radiobutton path="sex" value="M" />Male <form:radiobutton
path="sex" value="F" />Female</td>
<td><form:errors path="sex" cssClass="error" /></td>
</tr>
<tr>
<td>Choose a number :</td>
<td><form:radiobuttons path="favNumber" items="${numberList}" />
</td>
<td><form:errors path="favNumber" cssClass="error" /></td>
</tr>
<tr>
<td colspan="3"><input type="submit" /></td>
</tr>
</table>
</form:form>
</body>
</html>
使用JSTL循环提交的单选按钮值,并显示它。
文件:CustomerSuccess.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
<h2>Spring's form radio button example</h2>
Sex : ${customer.sex}
<br /> Favourite Number : ${customer.favNumber}
<br />
</body>
</html>
5. Spring Bean配置
全部链接〜
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean class="com.mkyong.customer.controller.RadioButtonController">
<property name="formView" value="CustomerForm" />
<property name="successView" value="CustomerSuccess" />
<!-- Map a validator -->
<property name="validator">
<bean class="com.mkyong.customer.validator.RadioButtonValidator" />
</property>
</bean>
<!-- Register the Customer.properties -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="message" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
6.演示
访问页面– http:// localhost:8080 / SpringMVCForm / radiobutton.htm
如果用户在提交表单时未选择任何单选按钮值,请显示并突出显示错误消息。
如果表单提交成功,只需显示提交的单选按钮值。
下载源代码
下载它– SpringMVCForm-RadioButton-Example.zip (9KB)
翻译自: https://mkyong.com/spring-mvc/spring-mvc-radiobutton-and-radiobuttons-example/