posts - 241,  comments - 116,  trackbacks - 0
          最近學(xué)習(xí)JSON的時(shí)候,數(shù)據(jù)傳輸問(wèn)題。以前比較迷惑JSON類(lèi)型的數(shù)據(jù),老是感覺(jué)就是JSON格式數(shù)據(jù)傳輸,不方便的很,也很反感。最近項(xiàng)目中用到了一個(gè)方法,所以就記錄一下,也順便接收接收大家的意見(jiàn),完善代碼、提高自己技術(shù)。
          (注:我相信,在我之前肯定有人發(fā)過(guò)此類(lèi)代碼,我并不與他人相比,只是自己的代碼,如果有哪些地方寫(xiě)的不對(duì),不合理的地方,大家指正,虛心受教,但是請(qǐng)不要謾罵!)
          json-lib-2.4-jdk15.jar JSON轉(zhuǎn)換格式j(luò)ar包。 在JSONObject的官網(wǎng)中就有。
          Struts的配置
          <!--自定議返回類(lèi)型-->
                  <result-types>
                      <result-type name="jsonResult" class="base.web.result.JsonResult"/>
                  </result-types>


          <action name="ajax" class="base.web.actions.week.WeekDataAction"
                          method="ajax">
                          <!-- jsonResult自定義返回類(lèi)型, -->
                          <result name="success" type="jsonResult">
                          </result>
                  </action>

          1.基礎(chǔ)返回類(lèi)型的抽象類(lèi) BaseResult

          (1)在定義struts的返回類(lèi)型時(shí)候,則必須繼承StrutsResultSupport這個(gè)類(lèi)

          (2)調(diào)用父類(lèi)的構(gòu)造方法。

          package base.web.result;

          import org.apache.struts2.dispatcher.StrutsResultSupport;

          import com.opensymphony.xwork2.ActionInvocation;

          /**
           * <ol>
           * date:2011-10-15 editor:Yq
           * <li>創(chuàng)建文檔</li>
           * <li>返回結(jié)果類(lèi)型基礎(chǔ)類(lèi)</li>
           * </ol>
           * <ol>
           *
           * @author YeQing
           * @version 2.0
           * @since 1.6
           */
          public abstract class BaseResult extends StrutsResultSupport{

              public BaseResult() {
                  super();
              }
              
              public BaseResult(String location) {
                  super(location);
              }
              
              public boolean isAjax = false;
              
          }
          2.自定義返回類(lèi)型的類(lèi) JsonResult
          package base.web.result;

          import java.io.PrintWriter;

          import javax.servlet.ServletContext;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import net.sf.json.JSONObject;
          import net.sf.json.JsonConfig;

          import org.apache.struts2.ServletActionContext;

          import base.web.actions.BaseAction;

          import com.opensymphony.xwork2.ActionInvocation;

          /**
           * <ol>
           * date:2011-10-15 editor:Yq
           * <li>創(chuàng)建文檔</li>
           * <li>自定義返回類(lèi)型JsonResult類(lèi)</li>
           * </ol>
           * <ol>
           *
           * @author YeQing
           * @version 2.0
           * @since 1.6
           */
          public class JsonResult extends BaseResult{

              protected boolean isAjax = true;
              
              protected void doExecute(String arg0, ActionInvocation invocation)
                      throws Exception {
                  
                  //定義上下文的環(huán)境
                  ServletContext sc = ServletActionContext.getServletContext();
                  HttpServletRequest request = ServletActionContext.getRequest();
                  HttpServletResponse response = ServletActionContext.getResponse();
                  response.setCharacterEncoding(request.getCharacterEncoding());
                  System.out.println(request.getCharacterEncoding());
                  response.setContentType("application/json");//這里ContentType 需是application/json JS否則會(huì)出錯(cuò)。
                  
                  PrintWriter output = response.getWriter();//獲取響應(yīng)打印
                  BaseAction baseAction = (BaseAction) invocation.getAction();//獲得基礎(chǔ)Action類(lèi)
                  
                  JSONObject js = new JSONObject();//JSON轉(zhuǎn)換為對(duì)象
                  js.put("model", baseAction.getModel());
                  /*此處js作為一個(gè)對(duì)象就像map一樣存儲(chǔ)自己的數(shù)據(jù)
                    baseAction.getModel()是actiond的基礎(chǔ)父類(lèi)
                       所有的action都必須繼承BaseAction,BaseAction的變量 Map model = new HashMap();
                       則是所有action中數(shù)據(jù)存放的map, model則是放在struts2的值棧中的數(shù)據(jù)。
                       所有的數(shù)據(jù),都必須放在model里,然后在jsp頁(yè)面使用JSTL進(jìn)行輸出.
                               (也就是,說(shuō)我將數(shù)據(jù)放入了model,然后將model放入了JSONObject,成為了JSON對(duì)象,
                                然后在js里獲得值,就像點(diǎn)運(yùn)算符一樣。)
          &nbsp;                */
                  
                  js.write(output);//打印
              }

          }
          3.JS異步請(qǐng)求,在回調(diào)函數(shù)中獲取數(shù)據(jù)。
          this.ajax=function() {
                  var request = new $WebRequest(basrUrl+"/psw/server/week/ajax.do",0,function(result)
                  {
                      alert(result.model.m.one);
                      //從回調(diào)函數(shù)的result中
                      //獲取存儲(chǔ)的model 然后獲取model中的m集合,
                                  //m.one map集合 中的oneKey 的值
                  });
                  request.Start();
              };
          4.補(bǔ)上WeekDataAction的方法。
          public String ajax() {
                  
                  System.out.println("start.......");
                  Map map = new HashMap();
                  map.put("one", 1);
                  map.put("two", 2);
                  model.put("m", map); //父類(lèi)的變量
                  return getResult();
              }
          結(jié)束,有些地方時(shí)項(xiàng)目中內(nèi)容,牽扯類(lèi)很多不好粘貼,如果大家有更好的辦法,告知一下,學(xué)習(xí)。
          posted on 2011-11-02 10:21 墻頭草 閱讀(5462) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開(kāi)發(fā)網(wǎng) 貨運(yùn)專(zhuān)家
          主站蜘蛛池模板: 邵阳市| 南华县| 泗洪县| 刚察县| 建水县| 凤冈县| 抚松县| 巍山| 萝北县| 霍城县| 安平县| 望江县| 钟山县| 洛川县| 静乐县| 宣城市| 建始县| 柳州市| 乌兰浩特市| 武汉市| 信丰县| 义乌市| 嘉鱼县| 新化县| 肇庆市| 庆元县| 广饶县| 苏尼特左旗| 额尔古纳市| 绥芬河市| 伊宁市| 台江县| 松阳县| 大荔县| 桦甸市| 仁寿县| 兴海县| 长宁区| 苍山县| 驻马店市| 安顺市|