解决方案 »
- js部分求改错
- String Object的问题
- Spring管理Session何时打开何时关闭?使用getHibernateTemplate()时如何解决nosession问题?
- 如何获取jsf中datagrid的选中行的数据
- target="mainFrame",为什么IE7无效
- .net与java的区别
- 谁能告诉我oscache 中的cache标签的各个属性是什么意思啊??急。。。
- 关于httpunit抓取动态网页的小问题
- 在JAVA中如何实现自动报表
- 有关 jdom的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ITEXT PDF 水印
- <jsp:include 用什么注释
还有你的数据库的语言格式是没问题的 oracle字符默认是UTF-8吧
{
String result=null;
byte temp[];
try
{
temp=str.getBytes("iso-8859-1");
result=new String(temp);
}
catch(UnsupportedEncodingException e)
{
System.out.print(e.toString());
}
return result;
}
struts.locale=zh_CN
struts.i18n.encoding=UTF-8
然后就看你是怎么传值的 是get 还是 post
你在Action 转码试试
在常规的工作空间那改。 具体流程:
窗口->首选项->常规->工作空间
先看看在action中是否有乱码
response.setCharacterEncoding("UTF-8");
java.lang.IllegalArgumentException: Can't convert argument: null”。
struts本身就有全局拦截的功能,新建一个类,继承ActionServlet ,在这里把编码设置一下就OK.
package com.shangdu.struts;import java.io.IOException;
import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionServlet;public class BaseActionServlet extends ActionServlet {
public void proress(HttpServletRequest request,HttpServletResponse response){
try {
request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
super.process(request, response);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}在WEB.XML里 把全局拦截器给换掉就OK了
原来的是这样<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>改完是这样
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>com.shangdu.struts.BaseActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
public class zw
{
public zw()
{
}
public static String zwzh(String str)
{
if(str == null)
{
return null;
}
try{
str = new String (str.getBytes("iso-8859-1"));
}
catch(Exception e)
{
System.out.println("!!!!!!!!!"+e);
}
return str;
}
public static void main(String[] age)
{
String kk="成功";
System.out.println("!!!!"+kk);
}
}
<?xml version="1.0" encoding="UTF-8"?>
还有<init-param>
<init-param>
<init-name>encoding</init-name>
<init-value>UTF-8</init-value>
</init-param>这两个地方吗?
如果这些你都明白了,你也不用看楼上那些具体的解决方案了,你就可以自己进行分析了。
对安装好的oracle改变字符集设置看行不行?可以在oracle用户的.profile文件中指定,例如
...
ORACLE_HOME=$ORACLE_BASE/product/8.1.6
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
...也可以在手工创建数据库的时候指定,注意安装的时候不能选择典型安装,这个时候没有选项让你选择字符集,如果你没有在.profile文件中指定NLS_LANG,字符集就只能是系统默认的了,不过默认的好像就是US7ASCII .
2.在struts中request.setCharacter()或者response.setCharacter()基本上没用
3.如果你的项目没用spring,那么建议自己创建一个过滤器,实现Filter借口就ok了
4.在web.xml配置下就行了
java.lang.IllegalArgumentException: Can't convert argument: null”可能是由于配置文件中有非法字符引起的,因为之前的是复制过来的,早上删去自己输了一遍,然后就可以了。我把myeclipse的默认编码类型改成UTF-8,如20楼所说。这是我web.xml中对过滤器的配置
<filter>
<filter-name>setEncoding</filter-name>
<filter-class>yourPackage.FilterEncoding</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这是我的过滤器类
package yourPackage;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;public class FilterEncoding implements Filter {
private String encoding = null;
private FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {
String encoding = this.encoding;
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
} public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
}
给同样想使用过滤器的朋友做个参考,其实都从网上淘来的。不过使用的时候,最好不要ctrl-c v,尤其是
web.xml,可能会出现非法字符问题,自己输一遍。回复的朋友们提供了很多建议,像直接转码、中文转换类、直接使用request.setCharacterEncoding和 response.setCharacterEncoding等等,有的是用了没效果,有的是觉得改起来麻烦不便于统一管理,所以最终用了过滤器,而且以后项目中应该还会用到过滤器。尽管问题是解决了,但是原理不是很清楚,因为我觉得很多解决方法和过滤器的思路都差不多,但是却没有效果,也可能是strut的原因。等以后搞明白了,再和大家分享吧。