posts - 70,comments - 408,trackbacks - 0

    这些天一直在自己开发一个项目审计系统,自开发项目真是心酸多多啊,从早上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 我心依旧 阅读(1873) 评论(5)  编辑  收藏

FeedBack:
# re: Struts中文问题&&link标签参数问题(第一次项目纪念)
2006-11-21 11:42 | mark
html:link page="/select.do" paramId="username" paramName="user" paramProperty="username">

你好,我也是用这种方式传递参数, 然后通过一个actoin处理这个username ,再转向另一个页面, 但,这样做后,我在action中读取username时,输出为null,请问你是怎么解决的呢?

request.getAttribute("username"); 返回为空,不知何故??

  回复  更多评论
  
# re: Struts中文问题&&link标签参数问题(第一次项目纪念)
2006-12-01 15:55 | zzyy163163
楼上,不要用
request.getAttribute("username");
用:request.getParameter("username");   回复  更多评论
  
# re: Struts中文问题&&link标签参数问题(第一次项目纪念)
2006-12-22 20:46 | 聪聪
多谢你的经验,真实受益匪浅呀!  回复  更多评论
  
# re: Struts中文问题&&link标签参数问题(第一次项目纪念)
2006-12-22 20:55 | 聪聪
再请问高手一下,在action中如何得到session,我的代码是
HttpSession session =request.getSession(true);
String username=(String)session.getAttribute(Constant.USER_KEY);
String uu="";
if(username.equals(uu)) return mapping.findForward("signtip");
else return mapping.findForward("bid");

运行后说第二句有问题 ,怎么回事啊?  回复  更多评论
  
# re: Struts中文问题&&link标签参数问题(第一次项目纪念)
2008-01-31 15:32 | NOFUYUN
我照你的方法建了一个过滤器,配置也是和你的相同,为什么传递过去的还乱码啊?

a.jsp
%@page contentType="text/html;charset=gb2312"%>
<html:link page="/form/gq_play.jsp" paramId="aa" paramName="list" paramProperty="gq_adress" target="_blank">
试听</html:link>
b.jsp
%@page contentType="text/html;charset=gb2312"%>
<%=request.getParameter("aa") %>
不知道怎么办了。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: