Struts2+json+jquery+mysql
弄了一天终于搞出来了
最终结果:
工程结构如下:
导入的包:
配置文件
Web.xml
<?xml version="1.0"encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></web-app>
Struts.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//ApacheSoftware Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="*.jsp">
<result>/{0}.jsp</result>
</action>
<action name="*">
<result>/{0}</result>
</action>
</package>
<package name="ajax" extends="json-default">
<action name="listAction"class="com.flb.action.listAction">
<result type="json">
<param name="root">result</param>
</result>
</action>
</package>
</struts>
MenuList.jsp
<body>
<select name="province"id="province">
<option value="">====请选择====</option>
</select>
<select name="city"id="city">
<option value="">====请选择====</option>
</select>
<select name="country"id="country">
<option value="">====请选择====</option>
</select>
</body>
<script language="javaScript">
$(document).ready(function(){
/*************************************************************/
//从数据库中查询省的信息显示在<selectname="province" id="province">中
$.post("listAction.action",function(data){
//alert(data.length);
alert(data);
// alert(textStatus);
var dataObj=eval("("+data+")");
for(var i=0;i<dataObj.length;i++){
alert(dataObj[i].pid+" "+dataObj[i].pname);
}
});
});
</script>
listAction.java
package com.flb.action;
import java.util.List;
import net.sf.json.JSONArray;
import com.flb.dao.Dao;
import com.flb.daoIpml.DaoIpml;
import com.flb.vo.Province;
import com.opensymphony.xwork2.ActionSupport;
public class listAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String execute() throws Exception{
System.out.println("有没有啊??");
//获取省的信息
Dao dao=new DaoIpml();
List<Province> list=dao.findAllProvince();
System.out.println(list);
//转化文json格式
JSONArray jsonArray=JSONArray.fromObject(list);
//result=jsonArray.toString();
this.setResult(jsonArray.toString());
System.out.println(jsonArray.toString());
return SUCCESS;
}
}
最后得到我想要的结果,转换为JSON对象,遍历打印出数据库中的数据。
虽然结果是得到了,现在我说下过程中碰到的问题。
问题1 首先是包的问题:
开始一直报错:
也就是JAR没有源附件的意思,以为是jar曝出问题了,所以换了个json-lib-2.4-jdk15.jar.可是还是报了下面的错,
果断认为是其它原因,果然是另一个包的问题,用Firebug调试了下:
java.lang.NoClassDefFoundError:Could not initialize class net.sf.cglib.proxy.Enhancer
有人说缺少 包会报上面的错,加上包之后真的可以哦。
问题2 jquery接收Action传回来的list
开始我Struts.xml中的代码是这样写的:
<package name="ajax"extends="json-default">
<action name="listAction"class="com.flb.action.listAction">
<result type="json"></result>
</action>
</package>
仔细看就挥发现只有<param name="root">result</param>
这一句不一样,可就是这一句话让我弄了一下午,所以代价是惨重的,一定要记得,没加这句话之前一直打印的都是:【Object Object】
尝试了各种方法传值,结果还是一样,后台的代码至少改过10遍以上,最后配置中话就搞定了一句话。也调试过,但报的错和这句话真的看似一点关系都没有,希望大家看了,碰到我一样的问题不会那么的纠结。