struts2-core-2.1.8.1.jar与jsonplugin-0.34.jar 配合使用会出现异常,以前的项目中jsonplugin-0.34.jar 配合 struts2-core-2.1.6.jar 使用不会出现异常。
解决方法:
去掉jsonplugin-0.34.jar;
使用struts2-json-plugin-2.1.8,json-lib-2.3-jdk15,ezmorph-1.0.6,jakarta commons-lang 2.4,jakarta commons-beanutils 1.7.0,jakarta commons-collections 3.2,jakarta commons-logging 1.1.1
注:不少人使用时会提示net.sf.ezmorph.xxx找不到,是缺ezmorph.jar;
使用JSONArray jsonObject = JSONArray.fromObject(xxx);等时,还需要引入json-lib-2.3-jdk15.jar
示例:
1、struts.xml配置
a、直接继承json-default包
<package name="default-package" abstract="true" extends="json-default">
<!-- 中间定义其他元素 -->
</package>
b、添加以下元素到struts.xml文件中(其实下面的xml代码也就是struts2-json-plugin-2.1.8包中struts-plugin.xml的内容
这里只是把它提出来放到struts.xml文件中,避免继承包)
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
2、action配置
注意下面的result类型type 以及参数root,田type指定结果类型为json,而参数root用来指明将action中的哪个参数作为json串返回给客户端
<package name="tableInfoOperAction" extends="json-default"> <action name="showColumns" class="com.***.action.TableInfoOperAction" method="showColumns"> <result name="success" type="json"> <param name="root">columnStr</param> </result> </action> </package>
3、Action代码
public String showColumns() throws Exception{ try{ if(tableName!=null&&!"".equals(tableName)){ colList=dbDataOperation.getColumnsByTableName(tableName); } JSONArray jsonArr=JSONArray.fromObject(colList); columnStr=jsonArr.toString(); }catch(Exception e){ e.printStackTrace(); logger.warn(e.getMessage()); } return SUCCESS; }
4、JS代码
<script type="text/javascript"> function showColumns(){ alert($("#tabId").val()); $.ajax({ url:"***/showColumns.do?tableName="+$("#tabId").val(), type:"GET", cache:false, dataType:"json", error:function(XMLHttpRequest, textStatus, errorThrown) { alert("出错啦!:" + XMLHttpRequest.status + "-" + textStatus); }, success:function(json){ alert(json); alert("okay"); } }); } </script>