En el último artículo, completamos la pantalla DataGrid de los datos JSON, pero no se asoció con los antecedentes. Simplemente mostramos los datos JSON que nos hicimos. En esta sección, integramos JSON y Struts2 para conectar la interacción entre EasyUI y Struts2.
1. Construcción del entorno JSON
El entorno JSON es muy simple, solo importe el paquete JSON JAR, de la siguiente manera:
(Nota: Dirección de descarga del paquete jar de JSON-LIB-24
2. Mejorar la acción
Hay una propiedad en el control DataGrid que es URL, que puede especificar la dirección de URL de los datos solicitados. En la sección anterior, establecemos directamente esta dirección en un archivo JSON específico. Aquí establecemos esta URL en una acción, como URL: 'Category_queryjoinAccount.action', lo que significa que se solicitará el método de consultación de la categoría de categoría (el código de Query.jsp se dará al final del artículo). Por lo tanto, necesitamos completar el método QueryjoinAccount en categoryAction.
Antes de integrar Struts2 y JSON, echemos un vistazo a qué solicitudes se enviaron para los datos JSON que se muestran antes:
Debido a que el tipo es una propiedad de la clase de categoría, hemos implementado la interfaz <cat -categoría> en Baseaction, por lo que este tipo se encapsulará en el modelo. No necesitamos preocuparnos por eso, podemos obtenerlo a través del modelo. Sin embargo, necesitamos obtener los parámetros de página y filas enviados automáticamente por EasyUI, para que podamos agregar dos variables de miembros y filas a BaseModel e implementar los métodos GET y SET. Finalmente, debemos considerar una cosa. Después de obtener todos estos parámetros, consultamos los datos en la base de datos en función de estos parámetros. Entonces, ¿dónde ponemos los datos que encontramos? También debe empaquetarse en formato JSON y enviar a la recepción antes de que DataGrid pueda mostrarlo. No consideramos cómo empaquetar los datos de consulta en formato JSON. Primero consideramos poner estos datos en un solo lugar. Es natural pensar en usar MAP, porque los datos en formato JSON están en forma de valor clave. Pensando en esto, continuamos mejorando la base:
@Controller ("BASEACTION") @Scope ("Prototype") Public Class BasAction <T> extiende ActionSupport implementa request AWare, SessionAWare, ApplicationAWeare, ModelDivened <T> {// La página y las filas están relacionadas con la paginación. PageMap almacena los datos de la consulta y luego los empaqueta en formato JSON. // Página y filas para implementar los métodos Get and Set. PageMap solo necesita implementar el método GET, porque PagEmap no recibe parámetros front-end, sino que está protegido por la página entera; filas enteras protegidas; Mapa protegido <String, Object> PageMap = Null; // Deje que diferentes acciones las implementen por sí mismas // omitir Get y Establecer métodos .../********************************* La siguiente sigue siendo la parte original de la base ********************************/// Service @resource protegida por categoría de servicio por categorías de servicio de categoría; @Resource Protected AccountService AccountService; // Mapa protegido de objeto de dominio <cadena, objeto> request; mapa protegido <cadena, objeto> sesión; mapa protegido <cadena, objeto> aplicación; @Override public void setApplication (map <string, objeto> aplicación) {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; } // modelo T protegido con modelado; @Override public t getModel () {parameterizedType type = (parameterizedType) this.getClass (). GetGenericsuperClass (); Class clazz = (class) type.getActualTyPearGuments () [0]; intente {model = (t) clazz.newinstance (); } catch (Exception e) {Throw New RuntimeException (e); } modelo de retorno; }} Ok, después de mejorar la categoría Basecation, podemos escribir el método QueryjoinAccount en categoryAction. Eliminamos todos los métodos originales en la categoría, porque se usaron para probar al construir el entorno antes, y ya no eran necesarios. Ahora realmente hemos comenzado el código del proyecto:
@Controller ("CategyAction") @Scope ("Prototype") La clase pública CategoryAction extiende Baseaction <Cateatory> {public String QueryjoinAccount () {// utilizada para almacenar los datos de Paging PageMap = New HashMap <String, Object> (); // Consulta los datos correspondientes basados en palabras clave y parámetros de paginación. Hemos escrito este método en servicio. En ese momento, completamos la lista de consultas en cascada <Catexatory> CategyList = CategyService.QueryjoinAccount (Model.Gettype (), página, filas); pageMap.put ("filas", categoryList); // almacenado en formato JSON. Desde el archivo JSON en la sección anterior, se puede ver que una clave es total y una clave es filas. Aquí almacenamos las filas primero. // Consulta el número total de registros basados en las palabras clave Long Total = CategyService.getCount (Model.GetType ()); // Este método no se ha escrito, vayamos a la capa de servicio para mejorarla más tarde // system.out.println (total); pageMap.put ("total", total); // almacenarlo en formato JSON, y luego almacene el retorno total "JSONMAP"; }} De esta manera, hemos escrito la acción. Ahora la acción obtiene los parámetros enviados desde la recepción y luego consulta el número total de registros del tipo especificado y todos los productos del tipo especificado de acuerdo con los parámetros. Se almacena de acuerdo con las claves especificadas en JSON (es decir, Total y filas) y se coloca en el hashmap. Después de eso, siempre que los datos en este hashmap se empaqueten en formato JSON y se envíen a la recepción, DataGrid puede mostrarlos. Primero ponemos este hashmap, primero mejoramos el código de la capa de servicio y luego empaquetamos los datos en este hashmap.
3. Mejorar el servicio de categorías
De la categoría anterior, podemos ver que se debe agregar un método GetCount a la categoría de servicio, y debe implementarse en la clase de implementación específica, de la siguiente manera:
// Interfaz de servicio CategyService Interfaz pública CategyService extiende BasesService <Cateatory> {// Información de categoría de consulta, en cascada la lista pública del administrador <Catherory> QueryjoinAccount (Tipo de cadena, INT Página, Tamaño int); // Consulta utilizando el nombre de la categoría // Consulta el número total de registros basados en palabras clave pública Long GetCount (tipo de cadena); } // categoryServiceImpl implement clase @SupessWarnings ("" Unchecked ") @Service (" CategoryService ") Clasificación pública Categoría C.CuPTOUND DONDE C.TYPE Like: type "; return getSession (). CreateQuery (HQL) .SetString ("Type", "%" + Tipo + "%") .setFirStresult ((Page-1) * size) // Show desde el primero .SetMaxResults (size) // show varias .list (); } @Override public Long GetCount (tipo de cadena) {String hql = "Seleccione recuento (c) desde la categoría C donde c.type me gusta: type"; return (long) getSession (). CreateQuery (HQL) .setString ("tipo", "%" + tipo + "%") .uniqueresult (); // devuelve un registro: número total de registros}} Hasta ahora, se ha abierto la ruta para obtener datos en esta base de datos. Los dos primeros pasos se han completado para recuperar datos de la recepción-> Base de datos->, y luego comenzamos a empaquetar los datos almacenados en el hashmap y luego enviarlos a la recepción.
4. Configurar struts.xml
Empaque los datos especificados se pueden completar a través de la configuración en Struts.xml. Primero veamos la configuración en Struts.xml:
<Struts> <constant name = "struts.devmode" value = "true"/> <paquete name = "shop" extends = "json-default"> <!-jason-default herede struts-default-> <global-results> <resultado name = "aindex">/web web/main/aindex.jsp </sult> </global-results> <! Idsule Corcess the Id Gails a la identificación de la identificación de la identificación de la identificación de la identificación de la identificación de la identificación de la identificación de la identificación de la identificación <! Acción configurada en Spring, porque se debe entregar a Spring Management-> <Action Name = "Category_*" Method = "{1}"> <!-Debe agregar el paquete JSON primero, y luego heredar el JSON-Default arriba-> <Result name = "jsonmap" type = "json"> < listas negras, filtrar opciones innecesarias y admitir la expresión regular JSON Format: {Total: 3, filas: [{cuenta: {id: 2, login: "user", nombre: "servicio al cliente a", pasar: "user"}, hot: true, id: 3, ...}]}-> <param name = "excludeProperties"> <!-Rows [0] .count.pass-<! se muestra aquí. Un error en csdn, seguiré la imagen y la pondré a continuación-> </amam> </ resultado> </action> <Action name = "Account_*" Method = "{1}"> <Result name = "index">/index.jsp </sult> </solcion> <!-La acción utilizada para completar el reenvío de la solicitud del sistema, todas las solicitudes se entregan a ejecutar a-> <Action name = "send __ _*_*_*_*_*_*_*_*_*_*" name = "Send">/Web-Inf/{1}/{2} .jsp </resultado> </action> </paquete> </truts>De la configuración anterior, podemos ver que en primer lugar, el paquete debe heredar JSON-default, porque JSON Default hereda Struts Default, porque hay un Struts2-JSON-Plugin-2.3.24.1.Jar en el paquete JSON JAR. Puede abrirlo y ver que hay un struts-plugin.xml en el interior. Puedes abrirlo y ver que JSON-Default hereda Struts Default:
A continuación, configuro <resultado>, el nombre es la cadena devuelta solo por acción, y el tipo debe coincidir con JSON. Luego están los parámetros en el resultado. En primer lugar, el parámetro que debe coincidir con el nombre como root. Este parámetro debe coincidir con el objeto hashmap que debe convertirse en este momento, es decir, el paemap que definimos. Con la configuración de este parámetro, los Struts empaquetarán los datos en el PageMap en formato JSON. Luego configure la lista negra. La lista negra significa decirle a los puntales qué campos no necesitan ser empaquetados al empaquetar, como información sobre contraseñas de administrador. Desde el formato Jason en el comentario anterior, puede ver que las filas [0] .account.pass representan el campo de contraseña, pero debe haber más de un datos, por lo que tenemos que usar expresiones regulares para representarlo, para que todas las contraseñas no se empaqueten en JSON.
5. Modificar consulty.jsp contenido
En este punto, hemos empaquetado los datos en formato JSON. A continuación, mejoraremos el contenido de front-end Query.jsp para que DataGrid se muestre correctamente:
<%@ page lenguaje = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 transitional // en"> <html> <fead> <%@ include file = "/public/head.jspf"%> <script type = "text/" javeScript/jexcript. $(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, fila) {console.info ("index" + index + "," + row) if (index % 2 == 0) {return 'de fondo: #fff;' {Field: 'CheckBox', CheckBox: True}, {Field: 'id', Title: 'Number', Width: 200} // Los campos de campo aquí deben ser los mismos que en la base de datos, es decir, deben ser los mismos que en los datos JSON]], columnas: [{{Campo: 'Título', Título: 'Nombre de categoría', Width: 100, // Tipo de campo de campo: "<span>" + valor + "</span>"; }}, {campo: 'Hot', Title: 'Hot', Width: 100, // Field Hot Formatter: Function (Value, Row, Index) {if (Value) {// Si está HOT, el valor es verdadero, y el valor es una variable booleana return "<input type = 'checkbox' checked = 'checked' desactivado = 'verdadero'"; "; // tick} else {return "<input type = 'checkbox' disable = 'true'"; // no verifique}}}, {campo: 'Account.login', Title: 'Administrator', Width: 200, //account.loginAdmindministrator Nombre de inicio de sesión Formatter: function (valor, fila, index) {if (fila // Si el nombre de inicio de sesión no está vacío, muestre el nombre de inicio de sesión} else {return "No hay administrador en esta categoría"; }}}]]}); }); </script> </head> <body> <table id = "dg"> </table> </body> </html> 6. La prueba muestra resultados
Finalmente, probemos los resultados de visualización de DataGrid, de la siguiente manera:
En este punto, hemos integrado con éxito Struts2 y JSON, y ahora podemos transmitir datos en formato JSON en primer plano.
(Nota: ¡Al final, proporcionaré la descarga del código fuente de todo el proyecto! Todos son bienvenidos a recopilar o compartir)
Dirección original: http://blog.csdn.net/eson_15/article/details/51332758
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.