这些天一直在自己开发一个项目审计系统,自开发项目真是心酸多多啊,从早上7点起床,到晚上11点睡觉.几乎没怎么离开电脑,处理掉了N多问题我的企业管理模块终于出炉了.回想一下困扰我时间最长的就是Struts的中文处理问题,和用<hmlt:link>标签传递页面上用<bean:write>输出的Bean的属性的问题.用纯Struts实现真是很难.这是我第一次开发项目,所以要把其中的酸甜苦辣都写出来.呵呵先说说中文问题把.我解决的时候可是遍布网络,通过各种方式寻找解决方案,终于工夫不负有心人我看到了一个帖子给我了极大的激发.这样解决不但可是让Action直接接收的Form的数据就是gb2312,而且还可以让数据库也能很好的解决中文问题,真是一石二鸟啊哈哈!
首先在web.xml上配置如下:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.huahang.tj.struts.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
然后写一个JAVA类,是一个过滤器,让然如果自己不爱写直接把下面的源代码copy上也可以.
package com.huahang.tj.struts.filters;
import javax.servlet.*;
import java.io.IOException;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
配置完了.在加上了这个过滤器类就在action中就可以直接从form中接收gb2312编码的数据了,返回时自然也是gb2312了。但是这个好像需要servlet 2.2以上的容器
我的环境是
windowsXp-MyEclipse4.0.3-Tomcat5.5-JDK1.5-Struts1.2
还有一个问题就是
<%@page contentType="text/html;charset=gb2312"%>
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<html:html>
<body>
您的帐户是:<bean:write name="user" property="username"/>
<br><br><br>
<h1>欢迎使用项目申报管理系统</h1>
<br><br>
<html:link page="/select.do" paramId="username" paramName="user" paramProperty="username">企业信息</html:link>
</body>
</html:html>
向上面那样的一个简单的JSP页面,用Struts的标签,<bean:write>输出了我在别的Action里存入Session的一个Bean的属性,这个属性用来作会话用的.然后我想把这个属性当作参数加入到一个<html:link>中.方法找了N多都没能很少的实现,因为项目要求是用纯Struts写,所以我没用JSP代码.最后一个朋友帮我找到了这个方法:
<html:link page="/select.do" paramId="username" paramName="user" paramProperty="username">
虽然看上去不怎么难,但是我以前看过的几本Struts书和上学的时候学的Struts都没涉及到这样传递参数的方法.这样在请求后面用paramId声明一个参数,要传递的参数.然后用paramName找到一个具体的Bean,然后是具体的属性用paramName实现.哈哈问题就解决了.因为是第一次写项目所以我感觉自己处理问题的方法还是不够简单明了.通过日夜奋战我的项目的企业模块的编码工作也都搞定了.初步测试通过.哈哈
posted on 2005-11-29 15:47
我心依旧 阅读(1892)
评论(5) 编辑 收藏