MyEclipse下Struts2配置使用和Ajax、JSON的配合
原创文章,转载请注明:MyEclipse下Struts2配置使用和Ajax、JSON的配合 By Lucio.Yang
新手,初学Struts2的配置,同时尝试与Ajax通过JSON交互。首先介绍MyEclipse下Struts2的配置。
1.Struts2的配置
右键项目,MyEclips->project facets->install apache struts(2.x)facets
URL pattern我选择了*.action,libraries只选择了core
1.1撰写action
新建package,名为action。在action中新建hd_query_action.java,调用hibernate方法,实现数据获取,并返回。
//hd_query_action.java
package action; import com.opensymphony.xwork2.ActionSupport; import java.sql.Timestamp; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.test.JSONAssert; import com.cc.hibernate.*; public class hd_query_action extends ActionSupport{ private String queryText;//http请求参数,命名和http参数名必须相同。 private JSONArray result;//返回的json //请求参数需要set方法,名称一定要是这种格式 public void setQueryText( String queryText ){ this.queryText = queryText; } //返回结果需要get方法 public JSONArray getResult(){ return result; } //程序入口 public String execute() throws Exception { //定义druginfo数组 System.out.println(this.queryText); JSONArray jsonArray=new JSONArray(); //hibernate DAO DrugInfoOperate DrugInfoOp=new DrugInfoOperate(); System.out.println("2"); List<DrugInfo> list=DrugInfoOp.queryDrugInfoWithKey(this.queryText); System.out.println("3"); //遍历数据集 for( DrugInfo druginfo:list ){ //获取数据,hibernate POJO String name=druginfo.getName(); String func=druginfo.getFunc(); String drugUsage=druginfo.getDrugUsage(); Timestamp prodDate=druginfo.getProdDate(); String manu=druginfo.getManufacturer(); //打包json JSONObject json=new JSONObject(); json.put("name",name); json.put("func",func); json.put("drugUsage", drugUsage); json.put("prodDate", prodDate); json.put("manufacturer", manu); //加入json数组 jsonArray.add(json); } this.result=new JSONArray();//返回结果初始化 result=jsonArray; return SUCCESS; } }
1.2配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="action" extends="json-default"> <action name="hdQueryAction" class="action.hd_query_action"> <result type="json"></result> </package> </struts>
1.3action打包json
用到了net.sf.json中的jar来解析json,所需jar包下载 百度云,下载后导入工程的lib。
2.JavaScript方法解析
<script>
var json,json_str;
//数据提交
function submit_query(){
var query_text=document.getElementById("u13").value;
var reg=new RegExp(" ","g"); //创建正则RegExp对象
//将空格替换为-
query_text=query_text.replace(reg,"-");
if( query_text.length>0 ){
//调用jquery的ajax方法
$.ajax({
type:"post",
url:"hdQueryAction.action",
data:{queryText:query_text},
dataType:"text",
success:function(msg){
json_str=eval("("+msg+")");
//alert(json_str.result);
json=json_str.result;
//第二种方法
//var obj=$.parseJSON(msg);
//var state_value=obj.result;
//alert(state_value);
//json=state_value;
//alert(json[0]);
var i=0;
var far=document.getElementById("u15");
far.innerHTML="";
for( i=0;i<json.length;i++ ){
var divC=document.createElement("div");
divC.setAttribute("class","query_results");
var divB=document.createElement("div");
divB.setAttribute("class","query_results_border");
var divN=document.createElement("div");
divN.setAttribute("class","query_results_name");
divN.innerHTML=json[i].name;
var divF=document.createElement("div");
divF.setAttribute("class","query_results_func");
divF.innerHTML=json[i].func;
var divU=document.createElement("div");
divU.setAttribute("class","query_results_usage");
divU.innerHTML=json[i].drugUsage;
var divM=document.createElement("div");
divM.setAttribute("class","query_results_manu");
divM.innerHTML=json[i].manufacturer;
divC.appendChild(divB);
divC.appendChild(divN);
divC.appendChild(divF);
divC.appendChild(divU);
divC.appendChild(divM);
far.appendChild(divC);
}
var divAuto=document.createElement("div");
divAuto.setAttribute("class","clearfloat");
far.appendChild(divAuto);
}
});
}
else{
alert("please input something");
}
}
</script>
3.Hibernate与Struts2冲突
在Struts2的action里使用网页传参并使用hibernate的查询方法或者更新方法可能失效,原因参见关于Struts2与hibernate结合出错的问题!------java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I问题解决及总结。原因为MyEclipse导入的struts2和Hibernate的jar包冲突,删除冲突的包的依赖即可。亲测可用,最后的jar包在一个lib下,所以不用担心某个框架无包可用。

浙公网安备 33010602011771号