struts2 json 中文返回值的问题?

zzw0598 2008-10-15 10:01:22
1、配置 struts2 jsonplugin-0.7 . 使用myeclipse 6.5 所有编码为 utf-8 .
web.xml 配置如下
<!--编码filter-->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<!-- 定义编码格式,我用的是UTF-8 -->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<!-- innore参数是在过滤器类定义的 -->
<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>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>*.jsp</servlet-name>
</filter-mapping>
<!-- Filter 定义结束 -->

<!-- struts2 定义 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2 定义结束 -->



struts2 中关于 json 的配置如下
<!-- 需要返回json类型的包 -->
<package name="json" namespace="/json" extends="json-default">
<action name="testtree" class="struts.action.TestTreeAction">
<result type="json" />
</action>
<action name="getTree" class="struts.action.TreeTest">
<result type="json"/>
</action>
</package>
其它struts2配置省略

TreeTest.java 如下
public class treeTest {
private String id;
private List tl=new ArrayList();
public String execute() {

int treeid=Integer.parseInt(getId());
if (treeid<1) treeid=5;
for(int i=1;i<treeid;i++){

treeNode t=new treeNode();
t.setId(Integer.toString(i));
t.setName("测试"); //请注意这一行,如果用中文返回结果就会被截断
t.setLeaf(treeid>9);
tl.add(t);
}
return "success";
}

public String getId() {
if(id==null)
id="10";
return id;
}
public void setId(String id) {
this.id = id;
}

public List getTl() {
return tl;
}

public void setTl(List tl) {
this.tl = tl;
}

}

TreeNode 类中只有这三个成员变量并有 setter和getter

使用 http://localhost:8080/json/getTree.action 访问 得到一个 getTree.action 的文件(调试方便,本来是用Ext处理的,问题与Ext无关)


问题:请注意有问题的那一行,如果 t.setName("测试"); 不使用中文值,则返回结果应该如下
{"id":"10","tl":[{"id":"1","leaf":true,"name":"11"},{"id":"2","leaf":true,"name":"11"},{"id":"3","leaf":true,"name":"11"},{"id":"4","leaf":true,"name":"11"},{"id":"5","leaf":true,"name":"11"},{"id":"6","leaf":true,"name":"11"},{"id":"7","leaf":true,"name":"11"},{"id":"8","leaf":true,"name":"11"},{"id":"9","leaf":true,"name":"11"}]}


但如果使用中文,则返回值如下
{"id":"10","tl":[{"id":"1","leaf":true,"name":"测试"},{"id":"2","leaf":true,"name":"测试"},{"id":"3","leaf":true,"name":"测试"},{"id":"4","leaf":true,"name":"测试"},{"id":"5","leaf":true,"name":"测试"},{"id":"6","leaf":true,"name":"测试"},{"id":"7","leaf":true,"name":"测试"},{"id":"8","leaf":true,"name":"测试"},{"id":"9","leaf":true,

最后被截掉了一部分,实际在log4j中的数据是全的,最后 补上 "name":"测试"}]}

感觉不是json plugin 本身的问题。
struts.properties 里加入
struts.locale=zh_CN
struts.i18n.encoding=utf-8
也没有效果。

使用struts 2.0.6 和struts 2.0.11.2 都出现此种问题,请问这种问题是什么原因?

...全文
2676 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
XiangQian0505 2010-12-17
  • 打赏
  • 举报
回复
man you bang zhu de
wander_java 2010-07-13
  • 打赏
  • 举报
回复
很实用
lovening1314 2010-05-27
  • 打赏
  • 举报
回复
顶了,楼主
Simmywang 2009-08-15
  • 打赏
  • 举报
回复
遇到同样的问题,看了LZ的帖子解决。多谢了
zenghong237 2009-03-19
  • 打赏
  • 举报
回复
感激ing,我也遇到了这个问题,终于得到了解决
sanan 2008-10-22
  • 打赏
  • 举报
回复
太谢谢啦 感激感激
zou_wei_forever 2008-10-20
  • 打赏
  • 举报
回复
帮顶!
JoeBlackzqq 2008-10-20
  • 打赏
  • 举报
回复
jf,学习解决问题的方法
java__king 2008-10-18
  • 打赏
  • 举报
回复
不太懂,帮顶啦.
kedakeda 2008-10-18
  • 打赏
  • 举报
回复
LZ的经验很好

用开源的东西最怕有搭配问题
问题点难找得很

顺便JF
whetu 2008-10-16
  • 打赏
  • 举报
回复
用utf-8没有问题,估计是0.7的包和你其他包不兼容,所以换个老版本的就没问题了
DiscussQuestions 2008-10-16
  • 打赏
  • 举报
回复
楼主很棒!~!这个问题都发现了!~!
帮顶!~!
zzw0598 2008-10-15
  • 打赏
  • 举报
回复
自己顶一下,有人能帮忙么
zzw0598 2008-10-15
  • 打赏
  • 举报
回复
补充:web.xml里的编码filter 去掉 同样存在此种问题。 浏览器使用 firefox 3.0 或是 IE7 都一样。
怀疑是 struts2 处理的问题。
liangpuchun 2008-10-15
  • 打赏
  • 举报
回复
你把那个UTF8改成GB2312看可以不
huoyutu 2008-10-15
  • 打赏
  • 举报
回复
顶。。。。。。。
zzw0598 2008-10-15
  • 打赏
  • 举报
回复
放分了……来者有份
zzw0598 2008-10-15
  • 打赏
  • 举报
回复
问题解决。 jsonplugin-0.7.jar 有问题, 这个是从别人的项目里拷来的。 可能名字都不对吧。
从网上找到了 jsonplugin-0.3.jar,解决。
zzw0598 2008-10-15
  • 打赏
  • 举报
回复
调试了一下,没什么结果。
但计算出 结果里每多一个汉字,最后就会少一个字符。
月夜雪 2008-10-15
  • 打赏
  • 举报
回复
帮顶!希望高手来帮你解决

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧