struts2--(局部)自定义类型转换

来源:互联网 发布:sql inset 编辑:程序博客网 时间:2024/06/08 08:06

(局部)类型转换的基本流程:

    提交表单

    struts.xml查找action

    Action类根据表单中的name属性调用set方法将值赋给对应的属性,调用每个属性之前,检查又没有定义这个类型的自定义类型转换

    如果没有,则根据默认的规则转换;如果有,则检查在同一目录下,有木有资源文件存在

    到自定义转换类中,检查转换的方向,返回对象

    到Action中,将返回的对象,set到对应属性中

    执行execute()方法

    根据struts.xml文件中,result的值找到要转到的页面

    页面中有,再到Action类中,寻找get方法,直接把值放到输出框中

    当找到自定义类型时,又会寻找自定义类型转换类,检查转换方向,返回对象

    显示到页面

    做类型转化时,需要注意:

    *-conversion.properties需要和Action放到一个包下,*代表Action的类名

    其内容为:要转换的对象=自定义转换类具体地址


案例:

登录index.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix = "s" uri = "/struts-tags"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body>    <s:form action = "login" method = "post">      <s:textfield name = "user" label = "用户名及密码"></s:textfield>      <s:submit value = "提交"></s:submit>    </s:form>  </body></html>
Action:

package com.action;import com.bean.User;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{  private User user;  private String massage ;    public String execute() {  this.setMassage("用户名:"+user.getUsername()+" 密码:"+user.getPassword());return SUCCESS;}  public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String getMassage() {return massage;}public void setMassage(String massage) {this.massage = massage;}}

javabean:

package com.bean;public class User {  private String username ;  private String password ;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}  }

结果界面ok.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix = "s" uri = "/struts-tags" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>My JSP 'ok.jsp' starting page</title>    <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body>    <s:property value = "user"/>  </body></html>


类型转换器UserConverter.java:

package com.converter;import java.util.Map;import com.bean.User;import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;public class UserConverter extends DefaultTypeConverter{  public Object convertValue(Map<String, Object> context, Object value, Class toType)  {  System.out.println("yes");  if(toType == User.class){  String[] user = (String[])value;  String[] user0 = user[0].split(",");  User u = new User();  u.setUsername(user0[0]);  u.setPassword(user0[1]);  return u;  }  else if(toType == String.class){  User user = (User)value;  return "用户名:"+user.getUsername()+" 密码:"+user.getPassword()+"!";  }    return null;  }}

struts.xml配置:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"    "http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts>  <package name="defalut" namespace = "/" extends = "struts-default">    <action name="login" class = "com.action.LoginAction">      <result>/ok.jsp</result>    </action>  </package></struts>


自定义类型转换属性配置文件LoginAction-conversion.properties:

user=com.converter.UserConverter


当然全局配置就很简单了。配置了全局的类型转换之后,就会对该javabean的所有实例起作用,配置如下xwork-conversion.properties

com.bean.User=com.converter.UserConverter

原创粉丝点击