本想做个简单的struts2 -ajax 只helloworld的,不想折腾了n个小时,愣是出不来结果,错误提示说 没有定义success的返回结果 (大意如此),代码全部都是从官方demo抄的啊,我郁闷
先看配置 struts.xml
<package name="json" extends="json-default">
<action name="login" class="org.office101.action.LoginAction">
<result type="json">
<param name="noCache">true</param>
<param name="contentType">text/html</param>
</result>
</action>
</package>
然后是action
public class LoginAction extends ActionSupport
{
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception
{
list.add("item1");
list.add("item2");
return SUCCESS;//super.execute();
}
private int[] array={1,2,3,5};
private String name="name";
private String password="password";
private List<String> list=new ArrayList<String>();
/**
* @return the name
*/
@JSON(name="usernmae")
public String getName()
{
return name;
}
//此处省略众多属性的get,set方法
}
最后上jsp代码,只是个简单的代码,能把json字符串返回就认为成功(js部分用jquery)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
request.setAttribute("path",path);
%>
<html>
<head><script type="text/javascript" src="<%=path%>/js/jquery-1.4.4.min.js"></script>
<SCRIPT type="text/javascript">
$().ready(function()
{
$("#ajaxsubmit").click(function()
{
$.get("login.action",null,function(date)
{
//alert(date);
$("#mydiv").html(date);
}),
"json"});
});
</SCRIPT>
</head>
<body>
This is my JSP page. <br>
<input type="button" id="ajaxsubmit" value="GetSth"/>
<br/>
<div id="mydiv" align="center"></div>
</body>
</html>
结果就这么简单个例子,让我折腾了n久,
www.baigoogledu.com 一下,有人写的例子是用JSONObject对象手动转换为JSON 字符串,然后把这个字符串的值作为Result返回的,我又试了一次,结果还是不行……
最后决定按照最原始的办法,手动添加jar包(用的myeclipse8.5,里面带struts2的向导,以及jar包了),程序全都重抄一遍,以排除错误,一弄不要紧,发现原来是struts版本的问题,struts2.1.8 在ajax的json转换上是有问题的,用struts2.2.1就没问题
用struts2.2.1要注意需要添加一个jar包“javassist-3.9.0.GA.jar”,在myeclipse的内置jar包里可以找到,据说在hibernate3.6版本里面也有。