Struts2.1.8整合json、jquery
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>