package gzu.oa.convert

早就听说EL表达式可以使用自己定义的函数,但一直觉得没有必要,也没有用到过.
为了尽量少在JSP页面中使用java代码,我是用JSTL标签库和EL表达式来实现的.今天遇到的问题是这样的:
从Servlet中通过URL传递参数到JSP页面,然后在JSP页面显示出来,当传递参数有中文的时候会显示为乱码,这个问题花了我大半天的时间;在做网站的时候,我已经很好解决Post和Get请求的乱码问题,以及Ajax返回的乱码问题.做过网站的朋友都知道,从URL传递参数和Get传参是一样的,可以说是同一种方法,为什么用解决Get请求乱码的方法却解决不了我的问题,我耐心的试了我所知道的所有办法,结果都失败了.
从一个JSP页面通过URL传递中文参数到另一个JSP页面显示时,我已经解决了乱码问题,今天遇到的不同的只是中文参数是从Servlet中通过URL传递到JSP页面显示的,应该没有区别才对,乱码问题太头疼.
我坚信这些问题总是有办法解决的,不会无缘无故的.
解决的办法大体上分为以下几步,首先是在Servlet中跳转并参数传递时进行编码,代码如下:
response.sendRedirect(“welcome.jsp?msg=” + java.net.URLEncoder.encode(“新疆福海”));
其实是编写EL编码转换函数:
package gzu.oa.convert;
import java.io.UnsupportedEncodingException;
public class Convert{
public static String convert(String str) {
try {
str = new String(str.getBytes(“iso8859-1″),”GB18030″);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
}
这里要注意的是这里的转换方法convert一定要是public static的.
接着在项目的WEB-INF/lib/下编写一个tld文件,在这里可以随便命名,如convert.tld,然后在里面写入:
< ?xml version="1.0" encoding="UTF-8" ?>
xsi:schemaLocation="
version="2.0">
1.1
elf
/toGB18030

convert

gzu.oa.convert.Convert

java.lang.String convert(java.lang.String)


需要注意的地方都有相关注释.
接着在要显示接收参数的JSP页面(welcom.jsp)里用如下方法以正确显示中文参数:
< %@ taglib uri="/toGB18030" prefix="lyq"%>
${lyq:convert(param.msg)
这里的uri=”/toGB18030″要和刚才tld文件中的/toGB18030保持一致,prefix可以任意取,在这就简单写为lyq,上面的convet函数同样也要和tld文件中convert保持一致.
运行就可以看到”新疆福海”四个汉字了,就这样解决了显示了乱码问题.

相关文章

  • 暂无相关日志

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

|