用 MultiActionController 实现 SimpleFormController的部分功能?
关键字: Spring
Controller
FormBean
Validator
JSP
- protected BindException bindObject(HttpServletRequest request,
- Object command, Validator validator) throws Exception {
- ServletRequestDataBinder binder = createBinder(request, command);
- binder.bind(request);
- BindException errors = new BindException(command,
- getCommandName(command));
- if (validator.supports(command.getClass())) {
- ValidationUtils.invokeValidator(validator, command, errors);
- }
- return errors;
- }
protected BindException bindObject(HttpServletRequest request,
Object command, Validator validator) throws Exception {
ServletRequestDataBinder binder = createBinder(request, command);
binder.bind(request);
BindException errors = new BindException(command,
getCommandName(command));
if (validator.supports(command.getClass())) {
ValidationUtils.invokeValidator(validator, command, errors);
}
return errors;
}
- TestFormBean formBean = new TestFormBean();
- Collection testList = new ArrayList();
- TestSelect a = new TestSelect();
- a.setCode("1");
- a.setName("a");
- TestSelect b = new TestSelect();
- b.setCode("2");
- b.setName("b");
- TestSelect c = new TestSelect();
- c.setCode("3");
- c.setName("c");
- testList.add(a);
- testList.add(b);
- testList.add(c);
- BindException errorModule = bindObject(request, formBean,
- new TestValidator());
- if (errorModule.hasErrors()) {
- Map model = errorModule.getModel();
- model.put("testList", testList);
- return new ModelAndView("loginview", model);
- }
TestFormBean formBean = new TestFormBean();
Collection testList = new ArrayList();
TestSelect a = new TestSelect();
a.setCode("1");
a.setName("a");
TestSelect b = new TestSelect();
b.setCode("2");
b.setName("b");
TestSelect c = new TestSelect();
c.setCode("3");
c.setName("c");
testList.add(a);
testList.add(b);
testList.add(c);
BindException errorModule = bindObject(request, formBean,
new TestValidator());
if (errorModule.hasErrors()) {
Map model = errorModule.getModel();
model.put("testList", testList);
return new ModelAndView("loginview", model);
}
FormBean
- public class TestFormBean {
- private String username;
- private String password;
- private Integer tokennumber;
- private String testSelect;
- private boolean testCheckBox;
- private String testRadio;
- private String testTextArea;
- private String testHidden;
- public boolean getTestCheckBox() {
- return testCheckBox;
- }
- public void setTestCheckBox(boolean testCheckBox) {
- this.testCheckBox = testCheckBox;
- }
- public String getTestHidden() {
- return testHidden;
- }
- public void setTestHidden(String testHidden) {
- this.testHidden = testHidden;
- }
- public String getTestRadio() {
- return testRadio;
- }
- public void setTestRadio(String testRadio) {
- this.testRadio = testRadio;
- }
- public String getTestTextArea() {
- return testTextArea;
- }
- public void setTestTextArea(String testTextArea) {
- this.testTextArea = testTextArea;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public Integer getTokennumber() {
- return tokennumber;
- }
- public void setTokennumber(Integer tokennumber) {
- this.tokennumber = tokennumber;
- }
- public String testSelect() {
- return testSelect;
- }
- public void setTestSelect(String testSelect) {
- this.testSelect = testSelect;
- }
- public String getTestSelect() {
- return testSelect;
- }
- }
public class TestFormBean {
private String username;
private String password;
private Integer tokennumber;
private String testSelect;
private boolean testCheckBox;
private String testRadio;
private String testTextArea;
private String testHidden;
public boolean getTestCheckBox() {
return testCheckBox;
}
public void setTestCheckBox(boolean testCheckBox) {
this.testCheckBox = testCheckBox;
}
public String getTestHidden() {
return testHidden;
}
public void setTestHidden(String testHidden) {
this.testHidden = testHidden;
}
public String getTestRadio() {
return testRadio;
}
public void setTestRadio(String testRadio) {
this.testRadio = testRadio;
}
public String getTestTextArea() {
return testTextArea;
}
public void setTestTextArea(String testTextArea) {
this.testTextArea = testTextArea;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getTokennumber() {
return tokennumber;
}
public void setTokennumber(Integer tokennumber) {
this.tokennumber = tokennumber;
}
public String testSelect() {
return testSelect;
}
public void setTestSelect(String testSelect) {
this.testSelect = testSelect;
}
public String getTestSelect() {
return testSelect;
}
}
Validator
- public class TestValidator implements Validator {
- public boolean supports(Class clazz) {
- return TestFormBean.class.equals(clazz);
- }
- public void validate(Object obj, Errors errors) {
- TestFormBean fromBean = (TestFormBean) obj;
- Integer tokennumber = fromBean.getTokennumber();
- if (null == tokennumber || tokennumber.intValue() <= 1000)
- errors.rejectValue("tokennumber", "test", null, "must > 1000");
- }
- }
public class TestValidator implements Validator {
public boolean supports(Class clazz) {
return TestFormBean.class.equals(clazz);
}
public void validate(Object obj, Errors errors) {
TestFormBean fromBean = (TestFormBean) obj;
Integer tokennumber = fromBean.getTokennumber();
if (null == tokennumber || tokennumber.intValue() <= 1000)
errors.rejectValue("tokennumber", "test", null, "must > 1000");
}
}
JSP
- <form:form commandName="command" name="cmForm" action="/cm/loginproc.htm">
- <form:input path="username"/>
- <spring:bind path="command.password">
- <input name="password" value='<c:out value="${status.value}"/>'>
- <c:out value="${status.errorMessage}"/>
- </spring:bind>
- <spring:bind path="command.tokennumber">
- <input name="tokennumber" value='<c:out value="${status.value}"/>'>
- <c:out value="${status.errorMessage}"/>
- </spring:bind>
- <form:select path="testSelect">
- <form:option value="-" label="--Please Select"/>
- <form:options items="${testList}" itemValue="code" itemLabel="name"/>
- </form:select>
- <form:checkbox path="testCheckBox"/>
- <form:radiobutton path="testRadio" value="1"/>
- <form:radiobutton path="testRadio" value="2"/>
- <form:textarea path="testTextArea" rows="3" cols="20"/>
- <form:hidden path="testHidden"/>
- </form:form>