`
jamesby
  • 浏览: 383919 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

用 MultiActionController 实现 SimpleFormController的部分功能?

阅读更多
Controller
	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);
			}


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;
	}
}


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");
	}
}


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>

刚刚做好一个测试的东东,打算在项目中这样使用,有什么问题请大家批评指正,谢谢!
分享到:
评论
4 楼 JavaFlasher 2007-03-08  
非常非常感谢。按你的方法成功了。谢谢
3 楼 jamesby 2007-03-07  
关键是你要先通过controller转到你的jsp,并且在controller中填写类似如下代码:

Map module = new HashMap();
module.put("command",new FormBean());
return new ModuleAndView(viewName,module);

2 楼 JavaFlasher 2007-03-06  
我在使用 MultiActionController 现在遇到一个这样的问题, 比如有一个 addbook.jsp ,它是添加界面,同时也是数据提交后经校验不合格重新返回的界面(此时要显示错误信息)。

问题就是 addbook.jsp中有这样的代码 :

<spring:bind path="command.*">
    <c:if test="${status.error}">
        <font color="red">
            错误 :<br>
            <c:forEach items="${status.errorMessages}" var="error">
                <c:out value="${error}"/><br>
            </c:forEach>
        </font><br>
    </c:if>
</spring:bind>


现在问题就是 即使是第一次准备添加时 也会显示错误信息。我controller中代码是这样 :
        //数据校验
        BindException errors = super.bindObject2(req, book, new BookValidator());
        if (errors.hasErrors()) {
            return new ModelAndView(this.getAddbook(),errors.getModel());
        }


现在一种办法是在 第一次添加时 ,不运行上面代码,但会报
org.apache.jasper.JasperException: Neither Errors instance nor plain target object for bean name 'command' available as request attribute
	at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:112)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:249)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:827)


不知道这个问题有人遇到没有? 郁闷中。
1 楼 JavaFlasher 2007-03-06  
能否把第二段代码的方法名及其参数命名 写一下。我没成功。

相关推荐

    毕设外文文献翻译-Spring的webMVC构架模式 (2).docx

    控制器可以通过多种方式实现,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController、AbstractWizardFormController等,根据应用需求选择合适的基类。与Struts相比,...

    (完整word版)SSM英文文献翻译.docx

    它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...

    毕设 外文文献翻译-Spring的web MVC构架模式 (3).docx

    为了适应复杂的应用场景,Spring提供了多种抽象控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和AbstractWizardFormController,允许开发者按需选择。...

    Spring MVC 例子

    2. **控制器类**:使用`SimpleFormController`或`MultiActionController`实现的处理用户请求的Java类。 3. **视图解析**:如JSP页面,用于展示用户界面,它们通过Spring MVC的视图解析器如`...

    计算机外文翻译-Spring的web-MVC-构架模式.pdf

    - Spring MVC提供多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,帮助开发者处理不同复杂度的控制逻辑。 - 与Struts相比,Spring MVC允许...

    spring 2.0表单绑定实例

    自己写的spring表单绑定的小例子,分别使用SimpleFormController,MultiActionController,spring的form tag和validator。 还在MultiActionController里面实现了表单的绑定

    外文翻译-Spring的web-MVC-构架模式 (2).docx

    它提供了一个简单的控制器接口,如`ModelAndView.handleRequest(request, response)`,并支持多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和...

    外文翻译Spring的MVC构架模式

    控制器是负责处理请求和响应的组件,它可以是一个简单的控制接口,也可以是一个复杂的控制器,例如 AbstractController、AbstractCommandController、MultiActionController、SimpleFormController 和 ...

    SpringMVC教程及实现原理

    - 继承`MultiActionController`类以在单个控制器中实现多个方法处理不同的请求。 5. **配置控制器和URL映射**:在`spring-servlet.xml`文件中配置控制器和URL之间的映射关系。这一步类似于在Struts2中的`struts....

    springMVC的增删改查

    标题“SpringMVC的增删改查”告诉我们,这篇文章将介绍如何使用SpringMVC框架来实现基本的CRUD操作,这些操作是任何Web应用程序不可或缺的。 描述解释 描述“springMVC的增删改查,很好入门的学习资料。新手能看懂...

    Spring培训资料

    - **UseCase、Action和Service的关系**:UseCase描述了系统的功能需求,Action实现了UseCase中的业务逻辑,而Service则是对Action的进一步抽象。 **5.7 BO** - **BO(Business Object)**:BO是业务层的核心组成...

    spring 技术手册

    这部分内容介绍了如何使用Spring框架进行持久层开发,包括JDBC、Hibernate等技术的集成。 #### 二十八、JdbcTemplate基本存取 JdbcTemplate是Spring提供的一个用于简化JDBC编程的类,它提供了一系列的方法来执行...

    外文翻译-Spring的web MVC 构架模式.pdf

    与Struts和Webwork等框架相比,Spring更加灵活,可以在不需要全部功能时仅使用其部分组件。Spring强调的是业务逻辑与Web层的解耦,比如验证逻辑可以独立于控制器执行,有利于代码重用和测试。 2. **Web MVC设计原则...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    第十二章 使用Hibernate快速实现持久层处理 12.1 Hibernate介绍 12.1.1 Hibernate简介 12.1.2 下载Hibernate 12.1.3 配置Hibernate 12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    第十二章 使用Hibernate快速实现持久层处理 12.1 Hibernate介绍 12.1.1 Hibernate简介 12.1.2 下载Hibernate 12.1.3 配置Hibernate 12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    第十二章 使用Hibernate快速实现持久层处理 12.1 Hibernate介绍 12.1.1 Hibernate简介 12.1.2 下载Hibernate 12.1.3 配置Hibernate 12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    第十二章 使用Hibernate快速实现持久层处理 12.1 Hibernate介绍 12.1.1 Hibernate简介 12.1.2 下载Hibernate 12.1.3 配置Hibernate 12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 ...

    spring_mvc注解入门

    在传统的Spring MVC中,Controller通常需要实现`org.springframework.web.servlet.mvc.Controller`接口,或者是继承`SimpleFormController`或`MultiActionController`。但是使用注解后,Controller不再需要继承任何...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...

    开源框架 Spring Gossip

    ParameterMethodNameResolver MultiActionController 与 PropertiesMethodNameResolver ParameterizableViewController AbstractCommandController AbstractFormController ...

Global site tag (gtag.js) - Google Analytics