struts2前端传值到后端出现中文乱码的解决办法
struts2前端传值到后端出现中文乱码的解决办法
天高地厚宇宙无穷 发表于2年前
struts2前端传值到后端出现中文乱码的解决办法
  • 发表于 2年前
  • 阅读 48
  • 收藏 1
  • 点赞 2
  • 评论 0

1、自定义编码器转码(据说很不推荐这种方式)

    (1)解码器

package com.jack.utils;

import java.io.UnsupportedEncodingException;

import com.jack.model.Academy;

public class ConvertCharacter {
	/**
	 * 手动解码,解决前端传值到后端的中文乱码问题
	 * 
	 * @param s
	 * @return
	 */
	public String Convert(String s) {
		String result = null;
		byte[] temp;
		try {
			temp = s.getBytes("iso-8859-1");
			result = new String(temp, "utf-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
    // 返回已经解码了的对象
	public Object ConvertObj(Object obj) {
		if (obj instanceof Academy) {
			obj = (Academy) obj;
			((Academy) obj).setAcdCode(Convert(((Academy) obj).getAcdCode()));
			((Academy) obj).setAcdName(Convert(((Academy) obj).getAcdName()));
			((Academy) obj).setRemarks(Convert(((Academy) obj).getRemarks()));
		}
		return obj;
	}
}

    (2)当action中执行保存数据到数据库操作时,在action中调用该解码器解码

package com.jack.model;

import java.io.UnsupportedEncodingException;
import java.util.Set;

import lombok.Data;

import com.jack.dao.ManagerImple;
import com.jack.utils.ConvertCharacter;

@Data
public class Academy extends UrlManager {
	private int acdId;
	private String acdName;
	private String acdCode;
	private String remarks;
	private Set<StuClass> stuCls;

	/**
	 * 
	 * 直接将model和action结合,在model中定义增删改查即可
	 */
	private ManagerImple managerIm;

	public boolean save() throws UnsupportedEncodingException {

		managerIm = new ManagerImple();

		ConvertCharacter convert = new ConvertCharacter();

		System.out.println("保存:"+convert.ConvertObj(this));// 中文转码

		boolean isOk = false;

		isOk = managerIm.doSave(this);

		return isOk;
	}
}

2、通过配置过滤器编码方式解决(推荐使用,可我配置了几个小时都没成功!)

共有 人打赏支持
粉丝 12
博文 178
码字总数 14180
×
天高地厚宇宙无穷
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: