17_Struts 2.x 高级应用
来源:互联网 发布:jsp数据展示样式 编辑:程序博客网 时间:2024/06/05 03:06
17.1 数据类型转换器
17.1.1 实例:日期转换器
DateTimeConvertor.java
package com.uikoo9.util;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Map;import ognl.DefaultTypeConverter;public class DateTimeConvertor extends DefaultTypeConverter {private DateFormat[] dateFormat = {new SimpleDateFormat("yyyy-mm-dd"),new SimpleDateFormat("yyyy/mm/dd"),new SimpleDateFormat("yy-mm-dd"),};private DateFormat[] timeFormat = {new SimpleDateFormat("hh:mm:ssss"),new SimpleDateFormat("hh:mm"),};@SuppressWarnings("rawtypes")@Overridepublic Object convertValue(Map context, Object value, Class toType) {String[] parameterValues = (String[])value;try {if(toType.equals(java.sql.Date.class)){for(DateFormat format: dateFormat){return new java.sql.Date(format.parse(parameterValues[0]).getTime());}}else if(toType.equals(java.sql.Time.class)){for(DateFormat format : timeFormat){return new java.sql.Time(format.parse(parameterValues[0]).getTime());}}else if(toType.equals(java.util.Date.class)){for(DateFormat format: dateFormat){return format.parse(parameterValues[0]);}}else if(toType.equals(String.class)){if(value instanceof java.sql.Date){}else if(value instanceof java.sql.Time){}else if(value instanceof java.util.Date){return dateFormat[0].format((java.util.Date) value);}}} catch (Exception e) {e.printStackTrace();}return super.convertValue(context, value, toType);}}
17.1.2 配置转换器
需要配置xwork-conversion.properties,如
java.sql.Date = com.uikoo9.util.DateTimeConvertorjava.sql.Time = com.uikoo9.util.DateTimeConvertorjava.util.Date = com.uikoo9.util.DateTimeConvertor
17.1.3 Action代码示例
ConvertorAction.java
package com.uikoo9.action;import java.sql.Date;import java.sql.Time;import com.opensymphony.xwork2.Action;public class ConvertorAction implements Action {private Date sqlDate;private Time sqlTime;private java.util.Date utilDate;public String execute() throws Exception {return INPUT;}public String convert(){return SUCCESS;}//getters and setterspublic Date getSqlDate() {return sqlDate;}public void setSqlDate(Date sqlDate) {this.sqlDate = sqlDate;}public Time getSqlTime() {return sqlTime;}public void setSqlTime(Time sqlTime) {this.sqlTime = sqlTime;}public java.util.Date getUtilDate() {return utilDate;}public void setUtilDate(java.util.Date utilDate) {this.utilDate = utilDate;}}
struts.xml
<action name="convertor" class="com.uikoo9.action.ConvertorAction"> <result name="input">/convertor.jsp</result> <result name="success">/convertorSuccess.jsp</result> </action>
convert.jsp
<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>convert</title></head><body><s:form action="convertor"><s:label label="转换器"></s:label><s:textfield name="sqlDate" label="SQL Date"></s:textfield><s:textfield name="sqlTime" label="SQL Time"></s:textfield><s:textfield name="utilDate" label="Util Date"></s:textfield><s:submit value="提交" method="convert"></s:submit></s:form></body></html>
convertSuccess.jsp
<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>success</title></head><body>java.sql.Date: <s:property value="sqlDate"/>java.sql.Time: <s:property value="sqlTime"/>java.util.Date: <s:property value="utilDate"/><br/><a href="convertor.action">重新转换</a></body></html>
17.1.4 为Action配置转换器
可以单独的为Action配置转换器
struts.xml
<action name="convertor" class="com.uikoo9.action.ConvertorAction" converter="com.uikoo9.util.DateTimeConvertor"> <result name="input">/convertor.jsp</result> <result name="success">/convertorSuccess.jsp</result> </action>
17.2 获取request,response
17.2.1 利用ServletActionContext的静态方法
这种方式也叫做非注射方式(非Ioc方式)
LoginAction.java
package com.uikoo9.action;import java.io.File;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class LoginAction extends ActionSupport{private String account;private String password;@SuppressWarnings("unused")public String login() throws Exception{HttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();HttpSession session = request.getSession(true);ServletContext context = ServletActionContext.getServletContext();session.setAttribute("account", account);File uploadFile = new File(context.getRealPath("upload"));return execute();}//getters ande setterspublic String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
17.2.2 利用相关的Aware接口
实现了Aware接口的Action,在实例化的时候会将需要的资源注射进去
ServletAwareAction.java
package com.uikoo9.action;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.interceptor.SessionAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class ServletAwareAction extends ActionSupport implements ServletRequestAware, ServletResponseAware, SessionAware, ServletContextAware {private ServletContext application;private HttpServletRequest request;private HttpServletResponse response;@SuppressWarnings("rawtypes")private Map session;@Overridepublic void setServletContext(ServletContext application) {this.application = application;}@Overridepublic void setSession(Map<String, Object> sessionValues) {this.session = sessionValues;}@Overridepublic void setServletResponse(HttpServletResponse response) {this.response = response;}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request = request;}@SuppressWarnings("unused")@Overridepublic String execute() throws Exception {String upload = application.getRealPath("upload");request.getRemoteAddr();response.getContentType();session.get("account");return SUCCESS;}}
17.3 使用Validator校验数据
17.3.1 使用XML配置数据校验Validator
使用XML配置时,需要在Action所在的包中添加BookAction-addBook-Validation.xml,而且支持校验的Action必须实现Validateable接口
BookAction-addBook-validation.xml
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"><validators> <field name="book.name"> <field-validator type="requiredstring"><param name="trim">true</param><message>请输入书籍名称</message> </field-validator> </field> <field name="book.author"> <field-validator type="requiredstring"><message>请输入书籍作者</message> </field-validator> </field> <field name="book.publishedDate"> <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2020-01-01</param><message><![CDATA[日期格式必须位于1990-01-01与2020-01-01之间]]></message> </field-validator> </field></validators>
17.3.2 配置客户端Validator
在<s:form>中添加属性validate="true"即可支持客户端js的校验,显示效果相同
17.3.3 常用的Validator
required:是否为null
requiredstring:字符串是否为null
stringlength:字符串长度
int/double:是否为int/double,而且可以检测长度等
date
url
conversion
expression/fieldexpression
visitor
regex
17.3.4 使用@Java注解配置Validator
BookAction.java
package com.uikoo9.action;import java.util.ArrayList;import java.util.List;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.validator.annotations.DateRangeFieldValidator;import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;import com.opensymphony.xwork2.validator.annotations.Validations;import com.opensymphony.xwork2.validator.annotations.ValidatorType;import com.uikoo9.model.Book;@SuppressWarnings("serial")public class BookAction extends ActionSupport{public static List<Book> bookList = new ArrayList<Book>();private String title;private Book book;public String initAdd(){return "initAdd";}@Validations(requiredStrings = {@RequiredStringValidator(type = ValidatorType.SIMPLE,trim = true,fieldName = "book.name",message = "请输入书籍名称. *"),@RequiredStringValidator(type = ValidatorType.SIMPLE,trim = true,fieldName = "book.author",message = "请输入书籍作者. *")},dateRangeFields = {@DateRangeFieldValidator(type = ValidatorType.SIMPLE,fieldName = "book.publishedDate",min = "1900-01-01",max = "2020-01-01",message = "日期必须大于${min}小于${max},当前值为${book.publishedDate}.")})public String add(){bookList.add(book);title = "<br/><br/>添加书籍成功<br/><br/>";return "success";}public String list(){return "list";}public String clear(){bookList.clear();title = "<br/><br/>清空书籍列表成功<br/><br/>";return "list";}//getters and setterspublic String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}public static List<Book> getBookList() {return bookList;}}
17.4 本章小结
- 17_Struts 2.x 高级应用
- 18_Struts 2.x 标签
- 19_Struts 2.x 拦截器与文件上传
- 02_Struts应用:helloapp应用
- Struts 2.x 高级应用
- 01_Struts与JavaWeb应用简介
- Javascript高级应用---牛X
- 15_Struts1.x高级应用
- 03_struts应用的需求分析与设计
- Hibernate3.x过滤器的高级应用
- Hibernate 3.x过滤器的高级应用
- Hibernate3.x过滤器中的高级应用
- Hibernate3.x过滤器的高级应用
- (三)Struts1.x高级应用
- 高级动画在android2.X版本上的应用
- 高级应用
- Tiles 2.x 应用指南
- Tiles 2.x 应用指南
- TexturePacker 3.0.4使用后感
- JS清空多文本框|文本域
- 三十分钟掌握STL
- $_SERVER详解
- 4 远程登录
- 17_Struts 2.x 高级应用
- 标记一下ARM的网站
- 转载:Android的设置界面及Preference使用
- Linux不是Windows
- 使用Html5的WebSocket在浏览器上传文件
- C#读书笔记(4)—重学数组
- 数据恢复工具总结
- 采样率,比特率,帧率,码率
- HTTP 协议详解