最後の記事では、JSONデータのDatagridディスプレイを完了しましたが、背景には関連付けられていませんでした。自分で作成したJSONデータを単に表示しました。このセクションでは、JSONとStruts2を統合して、EasyUIとStruts2の相互作用を接続しました。
1。JSON環境の建設
JSON環境は非常にシンプルで、次のようにJSON JARパッケージをインポートするだけです。
(注:json-lib-2.4のjarパッケージダウンロードアドレス:http://xiazai.vevb.com/201605/yuanma/json-lib-2.4(vevb.com).rar)
2。アクションを改善します
DatagridコントロールにはURLであるプロパティがあり、要求されたデータのURLアドレスを指定できます。前のセクションでは、このアドレスを特定のJSONファイルに直接設定します。ここでは、このURLをurl: 'category_queryjoinaccount.action'などのアクションに設定します。これは、カテゴリのqueryjoinaccountメソッドが要求されることを意味します(query.jspのコードが記事の最後に記載されます)。したがって、カテゴリのQueryJoinAccountメソッドを完了する必要があります。
Struts2とJSONを統合する前に、以前に表示されたJSONデータに送信されたリクエストを見てみましょう。
タイプはカテゴリクラスのプロパティであるため、BaseActionでModeldiven <Category>インターフェイスを実装しているため、このタイプはモデルにカプセル化されます。心配する必要はありません。モデルを通じて入手できます。ただし、EasyUIによって自動的に送信されるページと行のパラメーターを取得する必要があるため、2つのメンバー変数ページと行をBaseModelに追加してGetおよびSetメソッドを実装できます。最後に、1つのことを考慮する必要があります。これらすべてのパラメーターが取得された後、これらのパラメーターに基づいてデータベース内のデータをクエリします。では、見つけたデータはどこに配置しますか?また、JSON形式にパッケージ化して、Datagridが表示する前にフロントデスクに送信する必要があります。クエリデータをJSON形式にパッケージ化する方法は考慮していません。まず、このデータを1か所に配置することを検討します。 JSON形式のデータはキー価値の形式であるため、MAPの使用を考えるのは自然です。これを考えて、私たちは基礎を改善し続けます:
@Controller( "BaseAction")@scope( "Prototype")Public Class BaseAction <T> ActionSupport RequestAware、SessionAware、ApplicationAware、ModelDriven <T> {//ページと行はページングに関連しています。 PageMapはクエリデータを保存し、JSON形式にパッケージ化します。 //ページと行GETおよびセットメソッドを実装します。 PageMapは、FAGEMAPはフロントエンドパラメーターを受信せず、保護された整数ページであるため、GETメソッドのみを実装する必要があります。保護された整数行。保護されたマップ<文字列、オブジェクト> pagemap = null; //別のアクションを自分で実装させます@Resource保護されたAccountService AccountService; //ドメインオブジェクト保護されたマップ<文字列、オブジェクト>リクエスト;保護されたマップ<文字列、オブジェクト>セッション;保護されたマップ<文字列、オブジェクト>アプリケーション; @Override public void setApplication(map <string、object> application){this.application = application; } @Override public void setSession(map <string、object> session){this.session = session; } @Override public void setRequest(map <string、object> request){this.request = request; } //モデル駆動の保護されたTモデル。 @Override public t getModel(){parameterizedType type =(parameterizedType)this.getClass()。getGenericsUperClass(); class clazz =(class)type.getactualTypearguments()[0]; try {model =(t)clazz.newinstance(); } catch(Exception e){新しいruntimeException(e); } return Model; }}わかりました、Basecategoryを改善した後、カテゴリでQueryJoinAccountメソッドを記述できます。環境を構築するときにテストに使用されていたため、カテゴリのすべてのメソッドを削除します。これは、もはや必要ではなかったからです。今、私たちは本当にプロジェクトコードを開始しました:
@controller( "Categoryaction")@scope( "Prototype")public class categoryaction extends baseAuttion <category> {public string queryjoinaccount(){//ページングpagemap = new hashmap <string、object>(); //キーワードとページングパラメーターに基づいて対応するデータをクエリします。この方法を使用して作成しました。その時点で、cascading query list <category> categorylist = categoryservice.queryjoinaccount(model.getType()、page、rows)を完了しました。 pagemap.put( "rows"、categorylist); // JSON形式で保存されています。前のセクションのJSONファイルから、キーが合計であり、キーが行であることがわかります。ここでは、最初に行を保存します。 //キーワードに基づくレコードの総数をクエリlong total = categoryservice.getCount(model.getType()); //この方法は書かれていません。サービスレイヤーに行き、後で改善しましょう// System.out.println(合計); pagemap.put( "合計"、合計); // json形式で保存し、総return "jsonmap"を保存します。 }}このようにして、アクションを書きました。これで、アクションによりフロントデスクから送信されたパラメーターが取得され、指定されたタイプのレコードの総数と、パラメーターに従って指定されたタイプのすべての製品を照会します。 JSONで指定されたキー(つまり、合計および行)に従って保存され、ハッシュマップに配置されます。その後、このハッシュマップのデータがJSON形式にパッケージ化され、フロントデスクに送信される限り、Datagridによって表示できます。最初にこのハッシュマップを配置し、最初にサービスレイヤーコードを改善し、次にこのハッシュマップにデータをパッケージ化します。
3。カテゴリサービスを改善します
上記のカテゴリから、GetCountメソッドをカテゴリサービスに追加する必要があることがわかり、次のように特定の実装クラスに実装する必要があります。
// categoryserviceインターフェイスパブリックインターフェイスカテゴリサービスbaseService <カテゴリ> {//クエリカテゴリ情報、カスケード管理者パブリックリスト<カテゴリ> queryjoinAccount(string type、int page、int size); //カテゴリの名前を使用したクエリ} // categoryserviceimpl class @suppresswarnings( "unchecked")@service( "categoryservice")public class categoryserviceimpl extends baseserviceimpl <カテゴリ> categoryservice {@override public <categore <category> queryjoinacccount(int int page、int int feet、sting fien、 " c.Account c.type like:type "; return getSession()。create query(hql).setString( "type"、 "%" + type + "%").setfirstreSult((page-1) * size)// show first one.setMaxResults(size)//いくつかの.list(); } @Override public long getCount(string type){string hql = "count(c)from category cからc.type like:type"; Return(long) //レコードを返す:レコードの総数}}これまでのところ、このデータベースでデータを取得するためのパスが開かれています。最初の2つの手順は、フロントデスク - >データベース - >からデータを取得するために完了しました。その後、ハッシュマップに保存されているデータのパッケージを開始し、フロントデスクに送信します。
4。struts.xmlを構成します
パッケージング指定されたデータは、struts.xmlの構成を通じて完了できます。まず、struts.xmlの構成を見てみましょう。
<struts> <constant name = "struts.devmode" value = "true"/> <package name = "shop" extends = "json-default"> <! - jason-defaultはstruts-defaultを継承します - > <global-results> <result name = "aindex">/web-inf/main/aindex.jsp </result-results>春に構成されています。なぜなら、それは春の管理に引き渡されるためです - > <アクションname = "category_*" method = "{1}"> <! - jsonパッケージを最初に追加し、次に上記のJSONデフォルトを継承する必要があります - > <result name = "jsonmap" type = "json"> <!不要なオプションをフィルタリングし、正規表現JSON形式をサポートします:{合計:3、行:[{account:2、login: "user"、name: "customer service a"、pass: "user"}、hot:true、id:3、…}]} - > <param name = "expludeproperties"> csdnのバグ、画像に従って下に置きます - > </param> </result> </action name> <action name> <action name = "account_*" method = "{1}"> <result name = "index">/index.jsp </action> < name = "send">/web-inf/{1}/{2} .jsp </result> </action> </package> </struts>上記の構成から、JSON JARパッケージにStruts2-JSON-Plugin-2.3.24.1.jarがあるため、JSON-DefaultがStruts-Defaultを継承するため、パッケージはJSON-Defaultを継承する必要があることがわかります。それを開いて、内部にstruts-plugin.xmlがあることを確認できます。あなたはそれを開けて、JSON-DefaultがStruts-Defaultを継承していることを見ることができます:
次に、<sults>を構成します。名前はアクションだけで返された文字列で、型はJSONに一致する必要があります。次に、結果にパラメーターがあります。まず、rootとして名前と一致する必要があるパラメーター。このパラメーターは、今すぐ変換する必要があるハッシュマップオブジェクト、つまり定義したページマップに一致する必要があります。このパラメーターの構成により、StrutsはPageMapのデータをJSON形式にパッケージ化します。次に、ブラックリストを構成します。ブラックリストとは、管理者のパスワードに関する情報など、パッケージング時にどのフィールドをパッケージ化する必要がないかをStrutsに伝えることを意味します。上記のコメントのJason形式から、行[0] .Account.Passがパスワードフィールドを表していることがわかりますが、複数のデータが必要なため、すべてのパスワードがJSONにパッケージ化されないように、それを表すために正規表現を使用する必要があります。
5. query.jspコンテンツを変更します
この時点で、データをJSON形式にパッケージ化しました。次に、Datagridを正しく表示するために、フロントエンドquery.jspのコンテンツを改善します。
<%@ページ言語= "java" import = "java.util。*" pageencoding = "utf-8"%> <!doctype html public " - // w3c // dtd html 4.01 transitional // en"> <html> <head> <%file = " $(function(){$( '#dg')。datagrid({// urlアドレスが変更され、カテゴリアクションurl: 'category_queryjoinaccount.action'、loadmsg: 'loading ......'、queryparams:{type: ''}、//タイプパラメーター、empthing of of of of of of of of of of of of of of the of the of the of ond exting of to nuse of the of ond exting extemストライプ:true、true、singleSelect:true、rowstyler:function(index " + index +"、 " + row){return 'background-color:#fff;} {field: 'checkbox'、checkbox:true}、{field: 'id'、title: 'number'、width:200} //ここのフィールドフィールドはデータベースのフィールドと同じである必要があります。つまり、jsonデータのものと同じである必要があります]]、列: "<span>" + value + "</span>"; }}、{field: 'hot'、title: 'hot'、width:100、// field hot formatter:function(value、row、index){if(value){// hotの場合、値は真であり、値はブール変数です。 //ティック} else {return "<input type = 'チェックボックス' disable = 'true'"; //チェックしないで}}}、{field: 'account.login'、title: 'administrator'、width:200、//account.loginadministrator login name name formatter:function(value、row、index){if(row.account!= null && row.account.login!= null) //ログイン名が空でない場合は、ログイン名を表示します} else {return "このカテゴリには管理者はありません"; }}}]]]}); }); </script> </head> <body> <table id = "dg"> </table> </body> </html> 6.テストに結果が表示されます
最後に、次のように、Datagridの表示結果をテストしましょう。
この時点で、Struts2とJSONを正常に統合し、JSON形式のデータをフォアグラウンドに送信できます。
(注:最後に、プロジェクト全体のソースコードのダウンロードを提供します!誰もが収集または共有できます)
元のアドレス:http://blog.csdn.net/eson_15/article/details/51332758
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。