struts2自定义类型转换器

前台jsp页面

<%@ page language="java" 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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>局部类型、转换</title>
</head>
<body>
    <s:form action="login">
        <s:textfield name="user" label="用户"></s:textfield>
        <tr>
        <td colspan="2"><s:submit value="转换" theme="simple"/>
        <s:reset value="重填" theme="simple"/></td>
    </tr>
    </s:form>
</body>
</html>

Action的处理

package example.LocalConver;

import com.opensymphony.xwork2.ActionSupport;

import example.domain.User;

public class LoginAction 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("zhangsan")&&getUser().getPass().equals("123456")){
            addActionMessage("登录成功");
            return SUCCESS;
        }
        addActionMessage("登录失败");
        return ERROR;
    }
}

自定义转换器
定义转换器必须继承DefaultTypeConverter 重写convertValue

package example.LocalConver;

import java.util.Map;

import example.domain.User;
import ognl.DefaultTypeConverter;

public class UserConverter extends DefaultTypeConverter{

    /**
     * 类型转换器转换 方法必须重写
     * **/
    @Override
    public Object convertValue(Map context, Object value, Class toType) {
        // TODO Auto-generated method stub

        System.out.println(toType.getName());
        System.out.println(value);
        String[] str = (String[])value; // 这个value是字符数组不是字符串这个很关键
        for(String s:str){
            System.out.println(s);
        }
        System.out.println("Map     "+context);
        if(toType == User.class){
            String[] params = (String[])value;
            User user = new User();

            String[] userValues = params[0].split(",");

            user.setName(userValues[0]);
            user.setPass(userValues[1]);

            return user;
        }

        else if (toType == String.class )
        {
            // 将需要转换的值强制类型转换为User实例
            User user = (User) value;
            return "<" + user.getName() + ","
                + user.getPass() + ">";
        }
        return null ;


//      return super.convertValue(context, value, toType);



    }
}

还需要一个properties的文件
这里写图片描述
文件命名规则 action的类名-conversion.properiters

    //输入字段name = 转换器的路径
    user=example.LocalConver.UserConverter

这个配置文件的命名只能对单个action起作用
如果对这个User的bean起作用 那么需要配置
这里写图片描述

    //bean的全路径 = 转换器的路径
    example.domain.User=example.LocalConver.UserConverter

struts.xml

<?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="example5" namespace="/" extends="struts-default">
        <action name="login" class="example.LocalConver.LoginAction">
            <result>/content/out.jsp</result>
            <result name="error">/content/out.jsp</result>
        </action>
    </package>
</struts>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值