日期:2014-05-16  浏览次数:20415 次

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>