springmvc(二) 控制器Controller及乱码问题和日期问题的解决
2016-04-26 14:47
806 查看
上一篇文章结尾处点了一下映射器和视图解析器http://blog.csdn.net/hnkuo/article/details/51249411
本篇点一下控制器,直接上码
1) org.springframework.web.servlet.mvc.ParameterizableViewController
如果请求是/index.action的请求路径,则直接跳转到/index.jsp页面,不经过程序员定义的控制器Action
<!-- 专用于jsp到jsp/html的转发控制器 -->
<bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<!-- 转发到真实视图名 -->
<property name="viewName" value="/index.jsp"/>
</bean>
2) org.springframework.web.servlet.mvc.AbstractCommandController
能够以实体的形式,收集客户端参数
前端页面:
Action处理类:
Emp实体:
public class Emp {
private String username;//姓名
private String gender;//性别
//set、get方法省略
}
success.jsp页面获取:
注册spring提供的针对POST请求的中文乱码问题 web.xml中添加
若前端页面有日期,例如本例增加员工入职日期,则需在action处理类中自定义类型转换器,将String->Date类型(格式yyyy-MM-dd):
在EmpAction 中覆写initBinder方法:
/**
* 自定义类型转换器,将String->Date类型(格式yyyy-MM-dd)
*/
@Override
protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
//向springmvc内部注入一个自定义的类型转换器
//参数一:将String转成什么类型的字节码
//参数二:自定义转换规则
//true表示该日期字段可以为空
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}注:在Emp实体中添加入职时间属性private Date hiredate;
将入职时间显示到success.jsp页面中,若要格式化日期,则添加如下代码
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
本篇点一下控制器,直接上码
1) org.springframework.web.servlet.mvc.ParameterizableViewController
如果请求是/index.action的请求路径,则直接跳转到/index.jsp页面,不经过程序员定义的控制器Action
<!-- 专用于jsp到jsp/html的转发控制器 -->
<bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<!-- 转发到真实视图名 -->
<property name="viewName" value="/index.jsp"/>
</bean>
2) org.springframework.web.servlet.mvc.AbstractCommandController
能够以实体的形式,收集客户端参数
前端页面:
<form action="${pageContext.request.contextPath}/add.action" method="POST"> <table border="2" align="center"> <tr> <th>姓名</th> <td><input type="text" name="username"/></td> </tr> <tr> <th>性别</th> <td> <input type="radio" name="gender" value="男"/>男 <input type="radio" name="gender" value="女" checked/>女 </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="提交"/> </td> </tr> </table> </form>
Action处理类:
/** * 单例 * 处理类 * @author AdminTC */ @SuppressWarnings("deprecation") public class EmpAction extends AbstractCommandController{ public EmpAction(){ //将表单参数封装到Emp对象中去 this.setCommandClass(Emp.class); } /** * obj表示封装后的实体 * error表示封装时产生的异常 */ @Override protected ModelAndView handle( HttpServletRequest request, HttpServletResponse response, Object obj, BindException error)throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message","增加员工成功"); Emp emp = (Emp) obj; //将Emp封装到ModeAndView对象中 modelAndView.addObject("emp",emp); modelAndView.setViewName("/jsp/success.jsp"); return modelAndView; } }
Emp实体:
public class Emp {
private String username;//姓名
private String gender;//性别
//set、get方法省略
}
<span style="white-space:pre"> </span><!-- 注册Action --> <span style="white-space:pre"> </span><bean name="/add.action" class="cn.itcast.javaee.springmvc.app10.EmpAction"></bean> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span><!-- 映射器 (可不写)--> <span style="white-space:pre"> </span><!-- 适配器(SimpleControllerHandlerAdapter去找实现了Controller接口的Action,也能去找继承了AbstractCommandController类的Action,...)可不写--> <span style="white-space:pre"> </span><!-- 视图解析器 (可不写)-->
success.jsp页面获取:
${requestScope.message}<br/> 姓名:${requestScope.emp.username}<br/> 性别:${requestScope.emp.gender}<br/>
注册spring提供的针对POST请求的中文乱码问题 web.xml中添加
<span style="white-space:pre"> </span><filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
若前端页面有日期,例如本例增加员工入职日期,则需在action处理类中自定义类型转换器,将String->Date类型(格式yyyy-MM-dd):
在EmpAction 中覆写initBinder方法:
/**
* 自定义类型转换器,将String->Date类型(格式yyyy-MM-dd)
*/
@Override
protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
//向springmvc内部注入一个自定义的类型转换器
//参数一:将String转成什么类型的字节码
//参数二:自定义转换规则
//true表示该日期字段可以为空
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}注:在Emp实体中添加入职时间属性private Date hiredate;
将入职时间显示到success.jsp页面中,若要格式化日期,则添加如下代码
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
入职时间:<fmt:formatDate value="${requestScope.emp.hiredate}" type="date" dateStyle="medium" /> <!-- 1)fmt:formatDate 来源于 http://java.sun.com/jsp/jstl/fmt 2)fmt:formatDate作用是格式化日期的显示,例如:2015年5月10日 星期日 3)value表示需要格式化的值 4)type表示显示日期,时间,都显示 type=date表示只显示日期 type=time表示只显示时间 type=both表示日期时间均显示 5)dateStyle表示显示日期的格式:short/medium/default/long/full -->
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET Mvc开发之查询数据
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- 为ASP.NET MVC及WebApi添加路由优先级
- ASP.NET MVC中图表控件的使用方法
- 剖析ASP.NET MVC的DependencyResolver组件
- ASP.NET MVC的四种验证编程方式
- ASP.NET MVC @Helper辅助方法和@functons自定义函数的使用方法
- 仅30行代码实现Javascript中的MVC