原先在网上看到用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中定义了一个方法,如下:
- <span style="WHITE-SPACE: pre"> </span>/**
- <span style="WHITE-SPACE: pre"> </span> * AJAX 输出
- <span style="WHITE-SPACE: pre"> </span> */
- <span style="WHITE-SPACE: pre"> </span>private String result;
- <span style="WHITE-SPACE: pre"> </span>public String getResult() {
- <span style="WHITE-SPACE: pre"> </span>return result;
- <span style="WHITE-SPACE: pre"> </span>}
- <span style="WHITE-SPACE: pre"> </span>public void setResult(String result) {
- <span style="WHITE-SPACE: pre"> </span>this.result = result;
- <span style="WHITE-SPACE: pre"> </span>} 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="<strong>json-default</strong>" namespace="/advsimplestore">
- <action name="storeManage" class="com.tc.blacktea.adv.action.StoreSimpleAction" method="deleteStore">
- <interceptor-ref name="json" />
- <result name="delSuccess"<strong> type="json"</strong>>
- <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);
- }
- });
- }
- });
- });