Pada artikel terakhir, kami menyelesaikan tampilan data JSON Datagrid, tetapi itu tidak terkait dengan latar belakang. Kami hanya menampilkan data JSON yang kami buat sendiri. Di bagian ini, kami mengintegrasikan JSON dan Struts2 untuk menghubungkan interaksi antara Easyui dan Struts2.
1. Konstruksi Lingkungan JSON
Lingkungan JSON sangat sederhana, cukup impor Paket JAR JSON, sebagai berikut:
(CATATAN: JAR JAR JAR JAR JAR ALAMAT UNDANG: http://xiazai.vevb.com/201605/yuanma/json-lib-2.4(vevb.com).rar)
2. Tingkatkan tindakan
Ada properti dalam kontrol datagrid yang URL, yang dapat menentukan alamat URL dari data yang diminta. Di bagian sebelumnya, kami langsung mengatur alamat ini ke file JSON tertentu. Di sini kami mengatur URL ini ke suatu tindakan, seperti URL: 'Category_QueryJoNoCount.action', yang berarti bahwa metode QueryJoinAccount dari Categoryaction akan diminta (kode kueri.jsp akan diberikan pada akhir artikel). Jadi kita perlu menyelesaikan metode queryjoincount dalam kategori.
Sebelum mengintegrasikan Struts2 dan JSON, mari kita lihat permintaan apa yang dikirim untuk data JSON yang ditampilkan sebelumnya:
Karena tipe adalah properti dari kelas kategori, kami telah mengimplementasikan antarmuka ModelDriven <Category> dalam basa, sehingga jenis ini akan dienkapsulasi ke dalam model. Kami tidak perlu khawatir tentang hal itu, kami dapat memperolehnya melalui model. Namun, kita perlu mendapatkan parameter halaman dan baris secara otomatis dikirim oleh EasyUi, sehingga kita dapat menambahkan dua variabel anggota halaman dan baris ke basemodel dan mengimplementasikan metode GET dan atur. Akhirnya, kita perlu mempertimbangkan satu hal. Setelah semua parameter ini diperoleh, kami meminta data dalam database berdasarkan parameter ini. Jadi di mana kami meletakkan data yang kami temukan? Ini juga perlu dikemas ke dalam format JSON dan dikirim ke meja depan sebelum dapat ditampilkan oleh Datagrid. Kami tidak mempertimbangkan cara mengemas data kueri ke dalam format JSON. Kami pertama -tama mempertimbangkan untuk meletakkan data ini di satu tempat. Wajar untuk memikirkan penggunaan peta, karena data dalam format JSON dalam bentuk nilai kunci. Memikirkan ini, kami terus meningkatkan basa:
@Controller ("BaseAction") @Scope ("Prototipe") Basa kelas publik <T> Memperluas ActionSupport mengimplementasikan permintaan, sessionAware, ApplicationAware, ModelDriven <T> {// halaman dan baris terkait dengan paging. Pagemap menyimpan data kueri, dan kemudian mengemasnya ke dalam format JSON. // halaman dan baris untuk mengimplementasikan metode GET dan atur. PageMap hanya perlu mengimplementasikan metode GET, karena PageMap tidak menerima parameter front-end, tetapi merupakan halaman integer yang dilindungi; baris bilangan bulat yang dilindungi; Peta yang dilindungi <String, Object> pagemap = null; // Biarkan tindakan yang berbeda mengimplementasikannya sendiri // hilangkan dan setel metode .../************************* hal berikut ini masih merupakan bagian dasar yang asli ********************** // Objek layanan @Resource yang dilindungi Kategori pelindung layanan layanan layanan yang dilindungi; @Resource AccountService AccountService yang dilindungi; // peta yang dilindungi objek domain <string, objek> permintaan; Sesi peta yang dilindungi <String, Object>; Peta yang dilindungi <String, Object> Aplikasi; @Override public void setApplication (peta <String, Object> Application) {this.application = Application; } @Override public void setSession (peta <String, Object> sesi) {this.Session = sesi; } @Override public void setRequest (peta <String, Object> Request) {this.Request = request; } // model T ModelDriven Dilindungi Model; @Override public t getModel () {parameterizedType type = (parameterizedType) this.getClass (). GetGenericSuperclass (); Class clazz = (class) type.getActualTypeARGUMS () [0]; coba {model = (t) clazz.newInstance (); } catch (Exception e) {lempar runtimeException baru (e); } model return; }} OK, setelah meningkatkan Basecategory, kita dapat menulis metode QueryJoINAccount dalam kategoriAction. Kami menghapus semua metode asli dalam kategori, karena itu digunakan untuk pengujian ketika membangun lingkungan sebelumnya, dan mereka tidak lagi dibutuhkan. Sekarang kami telah benar -benar memulai kode proyek:
@Controller ("CategoryAction") @scope ("ProtoType") Class Public CategoryAction memperluas basa <Gategory> {public string queryJoNoCount () {// digunakan untuk menyimpan data paging pagemap = hashmap baru <string, objek> (); // Permintaan data yang sesuai berdasarkan kata kunci dan parameter paging. Kami telah menulis metode ini dalam layanan. Pada saat itu, kami menyelesaikan daftar kueri cascading <at kategori> CategoryList = CategoryService.QueryJognoinAccount (Model.GetType (), halaman, baris); pagemap.put ("baris", kategori); // disimpan dalam format JSON. Dari file JSON di bagian sebelumnya, dapat dilihat bahwa kunci adalah total dan kunci adalah baris. Di sini kita menyimpan baris terlebih dahulu. // query Total jumlah catatan berdasarkan kata kunci Long Total = CategoryService.getCount (model.getType ()); // Metode ini belum ditulis, mari kita pergi ke lapisan layanan untuk memperbaikinya nanti // system.out.println (total); pagemap.put ("total", total); // Menyimpannya dalam format JSON, dan kemudian menyimpan total pengembalian "jsonmap"; }} Dengan cara ini, kami telah menulis aksinya. Sekarang tindakan mendapatkan parameter yang dikirim dari meja depan, dan kemudian meminta jumlah total catatan dari jenis yang ditentukan dan semua produk dari jenis yang ditentukan sesuai dengan parameter. Disimpan sesuai dengan kunci yang ditentukan dalam JSON (mis. Total dan baris) dan ditempatkan di hashmap. Setelah itu, selama data dalam hashmap ini dikemas ke dalam format JSON dan dikirim ke meja depan, itu dapat ditampilkan oleh Datagrid. Kami pertama -tama menempatkan hashmap ini, pertama -tama meningkatkan kode lapisan layanan, dan kemudian mengemas data dalam hashmap ini.
3. Tingkatkan Kategori
Dari kategori di atas, kita dapat melihat bahwa metode getCount perlu ditambahkan ke CategoryService, dan harus diimplementasikan di kelas implementasi tertentu, sebagai berikut:
// CategoryService Antarmuka Antarmuka Publik CategoryService Memperluas BaseService <Petegory> {// Informasi Kategori Kueri, Daftar Publik Administrator Cascading <Gategory> QueryJoINAccount (Jenis String, Halaman int, ukuran int); // kueri menggunakan nama kategori // kueri Total jumlah catatan berdasarkan kata kunci public long getCount (tipe string); } //CategoryServiceImpl implement class @SuppressWarnings("unchecked") @Service("categoryService") public class CategoryServiceImpl extends BaseServiceImpl<Category> implements CategoryService { @Override public List<Category> queryJoinAccount(String type, int page, int size) { String hql = "from Category c left join fetch c.account where C. Type like: type "; return getSession (). Createqueery (HQL) .Setstring ("Type", "%" + type + "%") .setFirStresult ((Page-1) * size) // Tampilkan dari yang pertama. } @Override public long getCount (string type) {string hql = "pilih count (c) dari kategori C di mana c.type like: type"; return (long) getSession (). Createquery (HQL) .setstring ("type", "%" + type + "%") .Utaqueresult (); // Kembalikan catatan: Jumlah total catatan}} Sejauh ini, jalur untuk mendapatkan data dalam database ini telah dibuka. Dua langkah pertama telah diselesaikan untuk mengambil data dari database meja depan->->, dan kemudian kami mulai mengemas data yang disimpan dalam hashmap dan kemudian mengirimkannya ke meja depan.
4. Konfigurasikan struts.xml
Kemasan Data yang ditentukan dapat diselesaikan melalui konfigurasi di struts.xml. Mari kita lihat konfigurasi di struts.xml:
<struts> <name konstan = "struts.devmode" value = "true"/> <package name = "shop" extends = "json-default"> <!-Jason-default mewarisi struts-default-> <Global-results> <results name = "aindex">/web-inf/Main/aindex.jsult </name hasil = "aindex">/web-inf/main/aindex.jsuls </clopance </results> </aindex ">/web-inf/main/aindex.jsult </name ucapan> </aindex">/web-inf/main/aindex.jsuls dikonfigurasi di musim semi, karena harus diserahkan kepada manajemen musim semi-> <action name = "Category_*" Method = "{1}"> <!-Anda harus menambahkan paket JSON terlebih dahulu, dan kemudian mewarisi JSON-default di atas-> <name hasil = "JSONMAP" type = "json"> <!-untuk mengonversi data ke objek JSON-! Filter opsi yang tidak perlu, dan mendukung ekspresi reguler format JSON: {Total: 3, baris: [{akun: {id: 2, login: "pengguna", nama: "Layanan Pelanggan A", lulus: "pengguna"}, hot: true, id: 3,}]}-> <param name = "excludeproperties"> <! Bug di CSDN, saya akan mengikuti gambar dan meletakkannya di bawah-> </param> </sement> </action> <action name = "Account_*" Method = "{1}"> <name hasil = "index">/index.jsp </result> </action> <!-Tindakan yang digunakan untuk menyelesaikan permintaan sistem ke depan, semua permintaan diberikan kepada EXECUCE OVER OVER OVER OVER OVER OVER OVER OVER OVER Over name = "Send">/Web-inf/{1}/{2} .jsp </result> </chere> </packing> </struts>Dari konfigurasi di atas, kita dapat melihat bahwa pertama-tama, paket harus mewarisi JSON-default, karena JSON-default mewarisi struts-default, karena ada struts2-json-plugin-2.3.24.1.jar dalam paket JAR JSON. Anda dapat membukanya dan melihat bahwa ada struts-plugin.xml di dalamnya. Anda dapat membukanya dan melihat bahwa JSON-default mewarisi struts-default:
Selanjutnya saya mengkonfigurasi <RACTS>, NAME adalah string yang dikembalikan hanya dengan tindakan, dan tipe harus dicocokkan dengan JSON. Lalu ada parameter dalam hasil. Pertama -tama, parameter yang harus dicocokkan dengan nama sebagai root. Parameter ini harus dicocokkan dengan objek hashmap yang perlu dikonversi sekarang, yaitu, pagemap yang kami tentukan. Dengan konfigurasi parameter ini, Struts akan mengemas data dalam pagemap ke dalam format JSON. Kemudian konfigurasikan daftar hitam. Daftar hitam berarti memberi tahu struts bidang mana yang tidak perlu dikemas saat pengemasan, seperti informasi tentang kata sandi administrator. Dari format Jason dalam komentar di atas, Anda dapat melihat bahwa baris [0] .Account.pass mewakili bidang kata sandi, tetapi harus ada lebih dari satu data, jadi kami harus menggunakan ekspresi reguler untuk mewakilinya, sehingga semua kata sandi tidak akan dikemas ke dalam JSON.
5. Ubah Konten Query.jsp
Pada titik ini, kami telah mengemas data ke dalam format JSON. Selanjutnya, kami akan meningkatkan konten kueri front-end.jsp untuk membuat tampilan datagrid dengan benar:
<%@ page language = "java" import = "java.util.*" pageenCoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en"> <html> <pead> <%@ termasuk file = "/head.jsp." "%"%Jrips = "%jrips/"%jrips = "%jrips ="%jrips = "%jrips ="%jrips = "@ jepsprips ="%public. " $(function(){ $('#dg').datagrid({ //url address is changed to request categoryAction url:'category_queryJoinAccount.action', loadMsg:'Loading......', queryParams:{type:''}, //type parameters, there is no need to pass specific types here, because we want to display all //width:300, fitColumns:true, Striped: True, Nowrap: True, Singleselect: True, Pagination: True, Rowstyler: Function (index, Row) {Console.info ("Index" + Index + "," + Row) if (index 2 == 0) {return 'latar belakang: #fff; {field:'checkbox',checkbox:true}, {field:'id',title:'number',width:200} //The field fields here should be the same as those in the database, that is, they should be the same as those in the json data]], columns:[[ {field:'type',title:'Category name',width:100, //field type formatter: function(value,row,index){ return "<span>" + value + "</span>"; }}, {field: 'hot', title: 'hot', width: 100, // field hot formatter: function (value, row, index) {if (value) {// Jika panas, nilainya benar, dan nilainya adalah variabel boolean "<input type = 'checkbox' check -centang = 'check -centang' disabled = 'true'"; // centang} else {return "<input type = 'checkbox' disable = 'true'"; // Jangan periksa}}}, {field: 'account.login', title: 'administrator', lebar: 200, //account.loginadministrator nama login formatter: function (value, row, index) {if (row.account! = Null && row.account.login! = Null) {row.account! = Null & row.account.login! = Null) {row.Account! // Jika nama login tidak kosong, tampilkan nama login} else {return "Tidak ada administrator dalam kategori ini"; }}}]]}); }); </script> </head> <body> <Table id = "dg"> </able> </body> </html> 6. Tes menunjukkan hasil
Akhirnya, mari kita uji hasil tampilan datagrid, sebagai berikut:
Pada titik ini, kami telah berhasil mengintegrasikan Struts2 dan JSON, dan sekarang kami dapat mengirimkan data dalam format JSON ke latar depan.
(Catatan: Pada akhirnya, saya akan memberikan pengunduhan kode sumber dari seluruh proyek! Semua orang dipersilakan untuk mengumpulkan atau berbagi)
Alamat asli: http://blog.csdn.net/eson_15/article/details/51332758
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.