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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。