Antes, completamos la lógica comercial relacionada con las categorías de productos, y luego comenzamos a hacer la parte específica del producto.
1. Cree tablas en los modelos de base de datos y mapa
Primero, creamos una nueva tabla en la base de datos y luego usamos la ingeniería inversa para asignar la tabla en una clase de modelo, la tabla es la siguiente:
/*============================================================================================================= =======================================================================/ cree tabla producto ( /* número de producto, crecimiento automático* /id int primario clave no nulo auto_incement, /* name de producto* /nombre varchar (20), /* precio precio* /precio decimal (8,2), /* imagen de producto* /picarchar (200), /* producto breve* /observación longText, /* producto detalles de productos longtext, /* fecha de producción de producto* /fecha de inyección de la producción de producto* Es un producto recomendado, se puede mostrar en la página de inicio del centro comercial */ comentario bool,/ *Si es un producto válido, se puede mostrar en la página de inicio del centro comercial */ abrir bool,/ *El número de categoría del producto está ubicado */ CID int, restricción cid_fk clave extranjera (cid) referencias categorías (id)););
No entraré en detalles sobre el uso de la asignación de ingeniería inversa a la clase Model. Mencioné anteriormente cómo usar la ingeniería inversa para generar el modelo.
2. Complete la capa de servicio y la arquitectura de acción de la categoría de productos
2.1 Arquitectura de capa de servicio para categorías de productos
Al igual que la categoría anterior, el producto también debe tener un servicio para operar la lógica comercial relacionada con el producto, por lo que tenemos que escribir un marco de productos para servicios y productos para servicios, que es el siguiente:
// La interfaz de servicio de productos hereda el servicio basado <producto> interfaz pública El servicio de productos extiende BaseService <Product> {} // ProductserviceImpl implementa ProductserviceImpl <Product> Class Hereding BaseServiceImpl <Product> e implementa la interfaz de productos de productos anteriores @Service ("Productservice") La clase pública de servicios públicos de servicios públicos de servicio BaseService ExtiensEmpl. 2.2 Estructura de acción de las categorías de productos básicos
Primero, necesitamos mejorar las anotaciones en la capa de servicio en Baseaction
@Controller ("BASEACTION") @Scope ("Prototype") Public Class Baseaction <T> Extiende ActionSupport implementa request AWare, SessionAWare, ApplicationAware, ModelDipniven <T> {@Resource Protected Productservice Productservice; // se omite otro código, o el código original ...} Luego escribimos una Productation para heredar el método:
ProductAction de clase pública extiende Baseaction <Product> {}En este punto, la arquitectura de backend del producto se ha construido básicamente, y el siguiente paso es mejorar las funciones específicas y la lógica comercial.
3. Completa la estructura básica de la recepción
La estructura básica de la recepción es la misma que la de la categoría de productos básicos. Echemos un vistazo a qué documentos están disponibles para la categoría de productos básicos terminados:
Primero copiamos una copia en la carpeta del producto en función de los archivos de recepción de su categoría de producto, y luego realizamos los cambios correspondientes. Analicemos el proceso primero: primero, index.jsp a aindex.jsp Muestra la barra de menú a la izquierda. Al hacer clic en la administración de categorías, ingrese la página Categoría/Query.jsp para mostrar toda la información de categoría de productos a la derecha. Las funciones de búsqueda y eliminación están en esta página. No es necesario que aparezca una nueva ventana, agregue una ventana salpicadera save.jsp y actualizar.jsp. Al hacer clic en la gestión del producto, ingrese la página Product/Query.jsp para mostrar toda la información del producto en el lado derecho. Las funciones de búsqueda y eliminación se completan en esta página. Agregar y actualizar save.jsp y update.jsp respectivamente aparece. A continuación, construiremos el marco de cada página y luego llenaremos la parte correspondiente.
Primero agregue el siguiente código en aindex.jsp:
A continuación, completamos el marco de la consulta.jsp:
<%@ 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"%> <type de estilo = "text/css" margen: 1px; } .searchbox {margen: -3; } </style> <script type = "text/javascript"> $ (function () {$ ('#dg'). dataGrid ({// cambia la dirección de url a consultyjoincategoría en el método de producción de solicitud: 'product_queryjoincategy.actation', cargMsg: 'Cargar ......', queryParams: {nombre: ''}, /////////////////sueuses de parámetro se cambia el parámetro, el parámetro, el parámetro, el parámetro, el parámetro se cambia el parámetro, el parámetro se cambia el parámetro, el parámetro se cambia el parámetro, se cambia el parámetro. está vacío, indicando que queremos mostrar todos los productos. Configurar este campo, el cambio de página no afectará los elementos seleccionados al girar la página // Barra de herramientas de definición de la barra de herramientas Agregar, eliminar, actualizar los botones y la barra de herramientas del cuadro de búsqueda: [{icOncls: 'icon-add', text: 'Agregar producto', manejador: function () {// Agregar código de activación}}, '-', {iconcls: 'Icon-edit', text: text: 'update:', {), {): {), {), {), {). Código de activación}}, '-', {icOnCls: 'icon-remove', text: 'delete producto', handler: function () {// agrega el código de activación}}, '-', {// El botón de consulta no es un linkButton, tiene sintax, pero también es compatible /> "}], RowStyler: function (index, fila) {console.info (" index " + index +", " + row) if (index % 2 == 0) {return 'fondo de fondo: #fff;'; } else {return 'background-color:#c4e1e1;'; }}, FrozenColumns: [[{campo: 'casilla de verificación, chechbox: true}, {campo:' id ', title:' número de producto ', ancho: 100}]], columnas: [[{campo:' name ', title:' Nombre del producto ', ancho: 100}, {campo:' precio ', título:' Precio del producto ', width: 100}, {Campo:' Título ',' Título, 'Título simple,' descripción ', ancho: 100}, {campo:' xremark ', título:' descripción detallada ', ancho: 100}, {campo:' fecha ', título:' tiempo de liberación ', ancho: 100}, {campo:' commend ', title:' producto recomendado ', ancho: 100, formatter: function (valor, row, Índice) {if) {Valor) {return type de input ". discapacitado = 'True' "; } else {return "<input type = 'CheckBox' Disable = 'True'"; }}}, {campo: 'Open', Título: 'Producto válido', Width: 100, Formatter: Function (Value, Row, Index) {if (valor) {return "<input type = 'checkbox' checked = 'checked' discapaced = 'true'"; } else {return "<input type = 'CheckBox' Disable = 'True'"; }}}, {campo: 'Category.Type', Título: 'Categoría de producto', ancho: 200, //category.type es la categoría de categoría de producto: function (valor, fila, index) {if (fila.category! = null && row.category.type! = null) {return row.category.type; // Si la categoría de producto no está vacía, devuelva la categoría de producto} else {return "Este producto no está clasificado por el momento"; }}}]]}); // Convierta el cuadro de texto ordinario en un cuadro de texto de búsqueda de consultas $ ('##ss'). Searchbox ({// activador de la consulta Event Searcher: function (valor, nombre) {// valor representa el valor de entrada // agrega código de activación}, solicitado: 'Ingrese la palabra clave de búsqueda'}); }); </script> </head> <body> <table id = "dg"> </table> </body> </html> A continuación, completamos el método de la categoría de Query en ProductAction. Antes de esto, debemos completar la parte del servicio. Lo desarrollaremos lentamente desde la capa inferior:
// Interfaz de servicio Products Interfaz Public Interface El servicio de servicio extiende BaseService <Product> {// Información del producto de consulta, categorías en cascada Lista pública <Product> QueryjoIncategoría (Tipo de cadena, Página int, tamaño int); // Consulta utilizando el nombre del producto // Consulta el número total de registros basados en palabras clave public Long GetCount (tipo de cadena); } @Suppleswarnings ("sin verificar") @Service ("Productservice") Public Class ProductserviceImpl extiende BaseServiceImpl <Product> Implementa Productservice {@Override Public List <Product> Queryjoincategory (nombre de cadena, int -intize) {String hql = "del producto p Left fetch p.category donde p.name como: name, name, intivine, int size) {string hql =" del producto P Left fetch P.Category donde p.name Like: name " return getSession (). CreateQuery (HQL) .SetString ("Nombre", "%" + Nombre + "%") .SetFirStresult ((Page-1) * Size) // show .SetMaxResults (size) // show varias .list (); } @Override public Long GetCount (nombre de cadena) {String hql = "Seleccionar recuento (p) del producto P P.Name como: Nombre"; return (long) getSession (). createQuery (HQL) .setString ("nombre", "%" + nombre + "%") .uniqueresult (); // devuelve un registro: número total de registros}} Se puede completar el método de incremento de consultación en ProductAction:
@Controller ("ProductAction") @Scope ("Prototype") ProductAction de clase pública extiende BASEACTION <Product> {public String QueryjoIncategory () {System.out.println ("Name:" + Model.getName ()); System.out.println ("Página:" + página); System.out.println ("filas:" + filas); // se usa para almacenar datos pagados pageMap = new Hashmap <String, Object> (); // Consulta los datos correspondientes de acuerdo con las palabras clave y la lista de parámetros de paginación <Product> ProductList = Productservice.Queryjoincategory (Model.getName (), página, filas); pageMap.put ("filas", ProductList); // Almacenamiento en formato JSON // Consulta el número total de registros basados en palabras clave Long Total = Productservice.getCount (Model.getName ()); // Almacenamiento en formato JSON return "jsonmap"; }} A continuación, configúrelo en Struts.xml y el mismo proceso que la categoría de producto anterior. Desde aquí, puede ver que después de desarrollar uno, el siguiente será pronto:
<Action Name = "Product_*" Method = "{1}"> <resultado name = "jsonmap" type = "json"> <param name = "root"> pageMap </param> <param name = "excludeProperties"> <!-filas [0] .category.acCount-> <!-Filtrar todas las cuentas, lo contrario ocurrirán problemas de carga perezosa. La siguiente captura de pantalla de esta parte-> </param> </resultado> </solcion>De esta manera, el programa de fondo está escrito, luego abre Tomcat y pruebelo. Cuando hacemos clic en la gestión de productos en la barra de menú a la izquierda, aparecerá la siguiente ventana a la derecha:
De esta manera, hemos completado el marco de la ventana de gestión de productos.
Dirección original: http://blog.csdn.net/eson_15/article/details/51354932
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.