Web開発:ページング技術の実現(中)——Struts 2+json


フロントエンドページが非同期でバックグラウンドに送信された場合、バックグラウンドはリクエスト処理を受けて戻り、struts 2でフロントのリクエストがバックグラウンドに送信された後に対応するactionに渡されて処理されるため、ajaxリクエストのurl形式は「/actionClass.action?params=x&...」に類似する
(1)環境:まず工事に依存するパッケージを追加し,バックグラウンドにはjsonデータフォーマットのサポートが必要であり,struts 2はjsonをサポートできる必要があるためmaven工事のpom.xmlファイルには、次の構成が含まれます.
    <dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.3</version>
      <classifier>jdk15</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-json-plugin</artifactId>
      <version>2.3.24</version>
    </dependency>

(2)struts 2のプロファイル:
<package name="front" namespace="/" extends="json-default">     //  json
    <action name="listContractsAjaxAction" class="contractAjaxAction" method="listContracts">
            <result type="json">            //  json    ,          
                <param name="root">contracts</param>
            </result>
        </action>
 </package>

(3)Actionクラス:
package com.mz.action;

import com.mz.service.IContractService;
import com.opensymphony.xwork2.ActionSupport;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

/**
 * Created by hadoop on 15-9-29.
 */
public class ContractAjaxAction extends ActionSupport {
    private JSONArray contracts;      //   json  
    private JSONObject countJson;

    private IContractService contractService;   //spring   

    public JSONArray getContracts() {     //   get set  
        return contracts;
    }

    public void setContracts(JSONArray contracts) {
        this.contracts = contracts;
    }

    public JSONObject getCountJson() {
        return countJson;
    }

    public void setCountJson(JSONObject countJson) {
        this.countJson = countJson;
    }

    public void setContractService(IContractService contractService) {
        this.contractService = contractService;
    }

    public String countContracts(){
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        try {
            request.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=utf-8");
        String chars = request.getParameter("chars");
        int count = contractService.getContractsSize(chars);
        countJson = new JSONObject();
        countJson.put("count", count);
        return SUCCESS;
    }

    public String listContracts(){           //         
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        try {
            request.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=utf-8");
        Integer pageIndex = Integer.valueOf(request.getParameter("pageIndex"));
        Integer pageSize = Integer.valueOf(request.getParameter("pageSize"));
        String chars = request.getParameter("chars");  //        
        contracts = new JSONArray();
        List<Map<String, Object>> cbs = contractService.listContracts(pageIndex,pageSize,chars);//      
        for(Map<String, Object> cb : cbs) {
            contracts.add(JSONObject.fromObject(cb));
        }
        return SUCCESS;
    }

}

(action対応クラスspringのプロファイルで設定)
まとめ:
フロントエンドajaxはactionの指定を要求し、struts 2ファイルでaction名に対応するクラスおよびメソッドに基づいて対応するメソッド処理を渡し、結果を返してプロファイルにフォーマットおよび名前を説明します.この名前はactionクラスの属性であり、setメソッドとgetメソッドを定義する必要があります.このように戻るとstruts 2は対応するプロパティの値を説明のフォーマットでフロントエンドに返すことができます.
関連コンテンツ
(1)Web開発:ページング技術の実現(上)——jBootstrapPage.js+ajax
(2)Web開発:ページング技術の実現(下)――Hibernateクエリ
(3)Web開発:Struts 2 Spring Hibernate統合(一)―Struts 2の使用
(4)Web開発:Struts 2 Spring Hibernate統合(二)――Springの使用
(5)Web開発:Struts 2 Spring Hibernate統合(三)上——Hibernateの使用
(6)Web開発:Struts 2 Spring Hibernate統合(三)下――Hibernateの使用