浏览 2138 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-26
action是WebWork编程的核心部分,负责: . 封装和传递数据; . 逻辑处理 一. Action接口 要求action实现com.opensymphony.xwork.Action接口,该接口有一唯一方法需要实现: String execute() throws Exception; 该接口内置很多静态属性,可作为execute()方法的返回值; 二. ActionSupport基类 该类包含了action能够提供的许多可选服务的默认实现(实现了很多可选的接口),让你更容易地开发自己的action类: 1. action验证:(com.opensymphony.xwork.Validateable接口) 该接口有一个唯一的方法,在该方法中可放入验证代码: void validate() 该方法会被合适的intereceptor调用。调用过程如下: . 执行validate()方法; . 如校验action出错(有错误消息增加至action),返回INPUT,否则执行这个action; 示例: @Override public void validate() { if(name==null||name.trim().length()<1) { addFieldError("name","Invalid name, please input again!"); } if(password==null||password.trim().length()<1) { addFieldError("password","Invalid password, please input again!"); } } 2. 显示错误信息:(com.opensymphony.xwork.ValidationAware接口) 收集错误信息并将这些信息显示给用户。错误信息能够依据class(action->actionErrors属性)级别 (放入一个Collection->fieldErrors属性)和字段级别(放入一个Map)进行收集。 一些常见方法: void addActionError(String anErrorMessage) Add an Action-level error message to this Action. void addActionMessage(String aMessage) Add an Action-level message to this Action. void addFieldError(String fieldName, String errorMessage) 3. 获取用户的locale: (public interface LocaleProvider接口) 该接口中拥有唯一的一个方法: Locale getLocale(); 通过该方法获得客户端的语言和地区; 4. 显示本地化文本:(com.opensymphony.xwork.TextProvider接口) 该接口基本上由多个不同参数的getText()方法组成,getText()方法用于查找本地化信息文本。 默认情况下, 本地化信息存于和action同一个包下,同名的.properties结尾的文本。 示例: cho4.LoginAction.java --------------------------------------------------------------------------- @Override public void validate() { if(name==null||name.trim().length()<1) { addFieldError("name",getText("invalid.name")); //通过getText获取本地化信息 } if(password==null||password.trim().length()<1) { addFieldError("password",getText("invalid.password")); } } ch04/LoginAction.properties --------------------------------------------------------------------------- invalid.name=Invalid name, please input again\! invalid.password=Invalid password, please input again\! 三. 使用ModelDriven action 1. ???????????????????????/ 四. 通过ActionContext访问数据 1. 获得HttpSession; 方法一: Map session = ActionContext.getContext().getSession(); session.put("user",user); 方法二:(推荐使用) public class Login extends ActionSupport implements SessionAware { Map session; public void setSession(Map session) { this.session = session; } ... } 实现SessionAware接口,该接口告知WebWork在action执行之前需要设置session Map。 2. 访问request和response 方法一: ActionContext ctx = ActionContext.getContext(); HttpServletRequest req = ctx.get(ServletActionContext.HTTP_REQUEST); HttpSession sessio = req.getSession(); 方法二: HttpServletRequest req = ServletActionContext.getRequest(); HttpSession sessio = req.getSession(); 方法三:(推荐使用) public class Login extends ActionSupport implements ServletRequestAware { HttpServletRequest req; public void setServletRequest(HttpServletRequest req) { this.req = req; } ... } 五. 处理文件上传 1. 使用request封装类访问上传文件 使用MultiPartRequestWrapper对象,该对象会从request的余下部分中把文件正确地解析出来。 a. JSP页面 b. action public class FileUpload extends ActionSupport implements ServletRequestAware { private HttpServletRequest req; @Override public String execute() { MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper)req; File doc = null; try { //获得File对象 doc = wrapper.getFiles("doc")[0]; //获得内容类型 System.out.println("content type: "+ wrapper.getContentTypes("doc")[0]); //获得初始文件名 System.out.println("name: "+wrapper.getFileSystemNames("doc")[0]); }catch(Exception e) { e.printStackTrace(); }finally { doc.delete(); } return SUCCESS; } public HttpServletRequest getReq() { return req; } public void setServletRequest(HttpServletRequest req) { this.req = req; } } 2. 自动文件上传 WebWork提供了一个interceptor: FileUploadInterceptor, 它封装了上传文件的获取和清理工作: . 自动获得request对象; . 自动获得request封装对象; . 自动清除File对象; FileUploadInterceptor在webwork-default.xml中自动设好。通过使用FileUploadInterceptor, 可以把 上传的文件(以及内容类型和文件名)看做是一般的表单参数。 html表单的input元素命名为doc, File字段也必须命名为doc,如多个文件则类型是 File[]; 内容类型命名为[element]ContentType, 如多个文件则类型是 String[]; 文件名命名为[element]FileName, 如多个文件则类型是 String[]; import java.io.File; import com.opensymphony.xwork.ActionSupport; public class FileUpload extends ActionSupport { private File doc; private String docContentType; private String docFileName; @Override public String execute() { System.out.println("doc: "+doc.getName()); System.out.println("docContentType: "+docContentType); System.out.println("docFileName: "+docFileName); return SUCCESS; } public void setDoc(File doc) { this.doc = doc; } public void setDocContentType(String docContentType) { this.docContentType = docContentType; } public void setDocFileName(String docFileName) { this.docFileName = docFileName; } } 3. 配置设定 webwork.properties中有三个属性可以对上传文件的选项进行设定: . webwork.multipart.parser: 定义底层的多部分 request 的解析器,可选值为 pell, cos和jakarta. 默认值为pell, 建议选用jakarta。 . webwork.multipart.saveDir: 上传文件WebWork临时保存目录。如没设定,则存于javax.servlet.context.tempdir 系统属性指定的目录中; . webwork.multipart.maxSize: 上传文件的大小上限,以字节为单位。默认值为2097152. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |