struts2类型转换

来源:互联网 发布:淘宝达人账号简介 编辑:程序博客网 时间:2024/05/19 21:17
struts2类型转换

基于ongl的类型转换
配置struts.xml

<?xml version="1.0"encoding="gbk"?>
<!DOCTYPE struts PUBLIC
       "-//Apache Software Foundation//DTD StrutsConfiguration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 设置Web应用的默认编码集为gbk -->
<constant name="struts.i18n.encoding"value="gbk" />
<!-- 设置Web应用的默认Locale为zh_CN-->
<constant name="struts.locale" value="zh_CN"/>
<!-- 设置Struts2.1应用的国际化资源文件,多个文件中间可用逗号分隔-->
<constant name="struts.custom.i18n.resources"value="MessageResource,globalMessage" />
<!--设置Struts2.1应用是否处于开发模式,通常在开发调试阶段设为true,正式上线后可设为false-->
<constant name="struts.devMode" value="true"/>
<!-- 设置Struts2.1的默认主题为simple-->
<constant name="struts.ui.theme" value="simple"/>
<!-- 设置上传文件临时文件夹 -->
<constant name="struts.multipart.saveDir"value="/tmp" />

<package name="book" extends="struts-default"namespace="/">
<!-- 类型转换 start -->
<action name="convertType"class="com.book.struts.action.ConverTypeAction">
<result>convertSuccess.jsp</result>
</action>
<action name="convert" >
<result>convertType.jsp</result>
</action>
       <!-- 类型转换 end-->
       </package>
</struts>

<!-----------------------------------建立一个pojo类User.java--------------------------------------------------->
package com.pojo;

public class User {

private String name;
private String passWord;
private int id;
private String loginName;
public User(String name,String passWord){
this.name = name;
this.passWord = passWord;
}
public User(){}
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassWord() {
return passWord;
}

public void setPassWord(String passWord) {
this.passWord = passWord;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getLoginName() {
return loginName;
}

public void setLoginName(String loginName) {
this.loginName = loginName;
}
}

<!------------------------------------配置ActionConverTypeAction.java---------------------------------->
package com.book.struts.action;

import com.opensymphony.xwork2.ActionSupport;
import com.pojo.User;

@SuppressWarnings("serial")
public class ConverTypeAction extends ActionSupport {

private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

@Override
public String execute() throws Exception {
if(getUser().getName().equals("michael")&&getUser().getPassWord().equals("123")){
return SUCCESS;
}
return INPUT;
}
}

<!---------------------------------------类型转换页面convertType.jsp--------------------------------------->
<%@ page language="java" import="java.util.*"pageEncoding="gbk"%>
<%@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.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>AddUser</title>
</head>

<body>
 
<form action="convertType" method="post">
<table>
<tr>
  <td>用户名:<input type="text"name="user.name"/></td>
  <td>密    码: <input type="password"name="user.passWord"/></td> 
  </tr>
<tr>
   <td><inputtype="submit" name="b1"value="提交"/></td>
  </tr>
</table>
</form>
</body>
</html>

<!--------------------------------------------成功页面convertSuccess.jsp-------------------------------------------------->
<%@ page language="java" import="java.util.*"pageEncoding="gbk"%>
<%@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.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>AddUser</title>
</head>

<body>
 
<table>
<tr>
  <td>用户名:<s:propertyvalue="user.name"/></td>
  <td>密    码:<s:propertyvalue="user.passWord"/></td>
  </tr> 
</table>
</body>
</html>


<!-====================================================>
部署运行程序会   在用户名框上填 michael   密码框填123  
会看到结果为:mchael  123 正常的结果
这是struts2 内置的类型转换器将字符串类型请求参数转换为复合类型
 
但是我想在一个用户名文本框中填写michael,123这样的字符串,
而想要的结果是和上面程序运行的结果一样,这时我们就要自定义类型转换

<!----------------------------------转换类型的jsp convertType.jsp------------------------------------------->
<%@ page language="java" import="java.util.*"pageEncoding="gbk"%>
<%@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.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>AddUser</title>
</head>

<body>
 
<form action="convertType" method="post">
<table>
<tr>
  <td>用户名:<input type="text"name="user"/></td>
  </tr>
<tr>
   <td><inputtype="submit" name="b1"value="提交"/></td>
  </tr>
</table>
</form>
</body>
</html>


<!----------------------------------自定义类型转换类UserConvert.java-------------------------------------->
package com.book.struts.action;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.pojo.User;

public class UserConvert extends StrutsTypeConverter{

@Override
public Object convertFromString(Map arg0, String[] arg1, Classarg2) {

User user = new User();
String[] params = arg1[0].split(",");
user.setName(params[0]);
user.setPassWord(params[1]);
return user;
}

@Override
public String convertToString(Map arg0, Object arg1) {
User user = (User)arg1;
return"<"+user.getName()+","+user.getPassWord()+">";
}

}

<!------------------------------注册全局类型转换器-------------------------------->
在src目录下建一个xwork-conversion.properties文件
<!------------------xwork-conversion.properties-------------------------->
#指定com.pojo.User类型需要
#指定类型转换机制com.book.struts.action.UserConvert
com.pojo.User=com.book.struts.action.UserConvert

<!--------------------------end------------------------------------------------------>
运行程序在用户名框中填写 michael,123 
程序正常运行结果是
用户名:michael
密码:123
注意在convertType.jsp中的用户名参数名为user而不是user.name
把UserConvert.java放在和ConverTypeAction.java同一目录下