<s:a action="manage_delete" namespace="/employee" ><s:param name="username" value="username"/>删除</s:a>
String[] username=(String[]) ActionContext.getContext().getParameters().get("username");
System.out.println("action接受结果"+username[0]);
传递的参数出现乱码。尝试了各种方法,像
1、 在struts配置文件中设置:
<constant name="struts.i18n.encoding" value="UTF-8" />
2、在web.xml文件中配置spring的过滤器
<filter>
<filter-name>setCharacterEncoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- filtered type -->
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、进行解码
try {
project_name=new String(project_name.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这三种方式均不能解决问题。
一直以为是在这里用ognl表达式取出来的时候就乱码了,后来调了一天,想了想,才发现,这里执行完saveDir的action以后,转发方式是redirect,那么就相当于是在地址栏重新输入,下面这个action的地址了,然后加上后面的参数。那么就相当于你自己在地址栏输入listDirByParent.action?child.name=中文。。。,那么这样的请求属于get方式请求,不会通过过滤器进行过滤,而是通过tomcat进行地址的编码,而tomcat的编码,我记得是iso-8809-1,那么在action端Struts2默认是utf-8的编码方式,所以编码跟解码的方式出现了不符,就会出现乱码了。那么解决办法就是,直接在tomcat的server.xml中修改下面这段
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />其中加粗的是添加的内容。
修改完以后,ok了。
后来想到由上面的解决方法想到:如下方法也可以解决
try {
project_name=new String(project_name.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}