0%

Struts2 类型转换器的使用

这里的类型转换器用来把用户输入转换成字符串解析后转换为指定的对象,也可以把对象转换成字符串输出页面。 这里以用户输入用户名密码为例,因为Action的属性要与Post过来的表单元素name属性对应,所以这里用户名和密码只有一个文件框中输入,以分号隔开。 JavaBean:User.java:

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;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return this.username+" "+this.password;
    }
}

test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>




Insert title here


    使用分号隔开用户名和密码
    
    user info:	
     
    

UserAction:

package com.struts2;

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

public class UserAction extends ActionSupport {
    private User user;
    //不再需要声明成String类型,配置好后会自动调用转换器转换
    //但变量名还是要和input的name属性对应
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }
}

struts.xml配置action:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="struts2" extends="struts-default">
        <action name="userAction" class="com.struts2.UserAction">
            <result name="success">/result.jsp</result>
        </action>
    </package>
</struts>

接下来就是配置转换器了,因为可以双向转换,所以有两个不同的转换方法.

package com.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.bean.User;
public class UserConverter extends StrutsTypeConverter {
    @Override
    public Object convertFromString(Map context, String[] values, Class toClass) {
        // TODO Auto-generated method stub
        //把jsp页面的提交转换成User对象
        String[] strs=values;
        String str=strs[0];
        String[] ss=str.split(";");
        User user=new User();
        user.setUsername(ss[0]);
        user.setPassword(ss[1]);
        return user;
    }

    @Override
    public String convertToString(Map context, Object o) {
        // TODO Auto-generated method stub
        //把User转换成字符串
        User user=(User)o;
        return user.getUsername()+" "+user.getPassword();
    }

}

接下来添加转换器配置文件,在UserAction所在的包下新建UserAction-conversion.properities文件,(文件名规则action名-conversion.properities),输入:

user=com.converter.UserConverter

Action中的属性=转换器类名.如果是全局类型转换,在src目录下建立xwork-conversion.properities,内容格式为对象所属类名=转换器类名 前面在struts.xml中配置action时配置了转向result.jsp,下面是result.jsp的代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>


  
    My JSP 'result.jsp' starting page
  
  
  
          
        username:${requestScope.user.username }
        password:${requestScope.user.password }
  

分别用struts2标签和EL表达式输出。