最近项目中需要用到这个,网上搜罗了一大堆都是有关怎么用,但是真正实施起来却不是这么回事,都不行,没有一个完整的demo例子。这里还是分享下我的实现之路吧。
原先在网上看到用jsonplugin-0.34.jar来处理的,可是由于自己的项目是在原有的基础上,导致报错 java.lang.NoClassDefFoundError com/opensymphony/xwork2/util/TextUtils 的错误,网上查询后得知是struct版本和json的版本不一致的问题导致的。
首先我的项目使用的是struct2.3.1的版本,因此需要在下载相关版本的插件,在网上看到一仁兄的解决方案:
解决方法:去掉jsonplugin-0.34.jar,使用struts2-json-plugin-2.3.1.jar 和 json-lib-2.3-jdk15.jar,struts2-junit-plugin-2.3.1.jar三个包
上面的插件下载 访问这里吧 http://central.maven.org/maven2/org/apache/struts/
使用这三个包终于走通了整个流程,现在贴上代码吧!
首先在action中定义了一个方法,如下:
/**
* AJAX 输出
*/
private String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
} public String deleteStore() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String storeID = request.getParameter("storeID");
// 用一个Map做例子
Map<String, String> map = new HashMap<String, String>();
// 为map添加一条数据,记录一下页面传过来loginName
map.put("name", "sdfsfsfd");
map.put("age", "20");
map.put("storeID", storeID);
// 将要返回的map对象进行json处理
JSONObject jo = JSONObject.fromObject(map);
// 调用json对象的toString方法转换为字符串然后赋值给result
this.result = jo.toString();
// 可以测试一下result
System.out.println(this.result);
return "delSuccess";
}
<package name="storeManage" extends="json-default" namespace="/advsimplestore">
<action name="storeManage" class="com.tc.blacktea.adv.action.StoreSimpleAction" method="deleteStore">
<interceptor-ref name="json" />
<result name="delSuccess" type="json">
<param name="result">result</param>
</result>
</action>
</package>
接着我们来看前端的JS代码,这里我采用的是jquery来编写的ajax代码:
我原先在项目为了测试,在表格的列表中每行有个删除按钮,点击出发ajax删除操作的,大家要自己测试的话需要自己稍微改下js代码。
jQuery(document).ready(function() {
jQuery('#table .delLink').click(function() {
if (confirm('确定删除本条数据吗?')) {
var storeID = jQuery(this).attr('J_ID');
var dataParam = {
"storeID" : storeID
};
jQuery.ajax({
url : "storeManage!deleteStore.action",
cache : false,
type : "POST",
data : dataParam,
dataType : "text",
success : function(data) {
alert(data);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
jQuery("#errorContain").html(XMLHttpRequest.responseText);
}
});
}
});
});