MyEclipse下struts2配置使用和Ajax、json的配合

原创文章,转载请注明:MyEclipse下struts2配置使用和Ajax、json的配合

新手,初学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.js方法解析

<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下,所以不用担心某个框架无包可用。

 

你可能感兴趣的:(MyEclipse)