El principio de agregar una parte del producto es el mismo que agregar una categoría de producto. Consulte el artículo: Agregar y actualizar una categoría de producto , pero es más complicado que una categoría de producto. Debido a que hay muchos atributos del producto, hay más campos en la base de datos correspondiente. También hay una opción para agregar un producto para cargar imágenes. Este pequeño contenido se explicará por separado en el próximo artículo, porque esto implica un punto de conocimiento, que es que Struts2 implementa la función de carga de archivos. No diré mucho más. Ahora comenzaré a mejorar el código para agregar la parte del producto:
1. Agregar productos
1.1 Agregar implementación de la interfaz de usuario para productos <Br /> Primero complete el código para agregar parte del producto en Query.jsp:
A continuación, veamos la implementación específica en save.jsp:
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 transición // en"> <html> <foad> <%@ include file = "/public/head.jspf"%> <type de estilo = "text/css" margen: 10px; } </style> <script type = "text/javaScript"> $ (function () {// El método de verificación personalizado registra la nueva función $ .extend ($. Formato: {// La implementación de la función, si devuelve False, la verificación no se validó: function (value, param) {// Obtener el nombre de sufijo del archivo actual var ext = value.substring (value.lastIndexof ('.') + 1) arr.length; formato json y envíelo a la URL: 'category_query.action', vallefield: 'id', textfield: 'type', // La lista desplegable muestra todas las categorías de productos panelHeight: 'AUTO', // Adaptive Altura Valor de panel: 120, // La lista desplegable es una ancho: 120 Compuesto de dos componentes, // El falso: Falso debe ser establecido al mismo tiempo, // El cuadro de descenso no es un ancho: // ComboBox hereda Combo hereda ValidateBox, por lo que puede establecer la verificación directamente aquí requerida: Verdadero, MissingMessage: 'Seleccione la categoría'}); $ ("Entrada [name = name]"). ValidateBox ({requerido: true, faltandoMessage: 'Ingrese el nombre del producto'}); $ ("Entrada [Name = Price]"). NumberBox ({requerido: True, MissingMessage: 'Ingrese el precio del producto', min: 0, Precisión: 2, // retener dos decimales de prefijo: '$'}); $ ("input [name = 'fileImage.upload']"). ValidateBox ({requirido: true, falta deMessage: 'cargue la imagen del producto', // Establecer el método personalizado de válvido: "format ['gif, jpg, jpeg, png']" // Los soportes son parámetros}); $ ("TextArea [name = observación]"). ValidateBox ({requerido: true, falta deMessage: 'Ingrese una descripción simple del producto'}); $ ("TextArea [name = xremark]"). ValidateBox ({requerido: true, faltandoMessage: 'Ingrese una descripción simple del producto'}); $ ("TextArea [name = xremark]"). ValidateBox ({requerido: true, faltandoMessage: 'Ingrese una descripción simple del producto'}); // deshabilitar la verificación $ ("#ff"). Form ("DisableValidation"); // Registre el evento del botón $ ("#enviar"). Click (function () {// Enable Verificación $ ("#ff"). Form ("EnableValidation"); // Si la verificación es exitosa, envíe datos if ($ ("#ff"). Form ("Validato") {// llamando al método de enviar para enviar datos de datos $ ("#ff"). 'Product_save.Action', Success: Function () {// Si tiene éxito, cierre la ventana actual. // eventos $ ("#reset"). Click (function () {$ ("#ff"). Form ("DisableValidation"); // Reset no requiere verificación de formulario // Restablecer los datos de formulario actuales $ ("#ff"). Form ("RESET");}); }); </script> </head> <body> <form id = "ff" método = "post" enctype = "multipart/form-data"> <div> <label> Nombre del producto: </etiqueta> <input type = "text" name = "name"/> </div> type = "file" name = "fileImage.upload"/> </div> <div> <label> categoría: </etiqueta> <input id = "cc" name = "category.id"/> </div> <div> <belebel> add to recomendar: <//etiquetado: </lel etiqueta> recomendado: <input type = "radio" name = "recomendado" versi type="radio" name="commend" value="false" /> </div> <div> <label>Is it valid:</label> Listed:<input type="radio" name="open" checked="checked" value="true" /> Removed:<input type="radio" name="open" value="false" /> </div> <div> <label>Simple description:</label> <textarea name="remark" cols = "40" Rows = "4"> </sexteArea> </div> <div> <label> Descripción detallada: </selaborándose <textArea name = "xremark" cols = "40" ROWS = "8"> </textarea> </div> <div> <1 AD = "Envíe" href = "#"> agregar </a> <a = "restet" hreet "#"#" </div> </form> </body> </html>Veamos principalmente la parte del método personalizado en el código JS anterior, que define principalmente la verificación de imágenes cargadas. El análisis específico es el siguiente:
Luego puede usar un método personalizado en la sección de verificación de imágenes:
1.2 La implementación de fondo de la adición de productos
@Controller ("ProductAction") @Scope ("Prototype") ProductAction de clase pública extiende BASEACTION <Product> {// omitir otros códigos ... public void save save () arroja excepción {// procesando imágenes cargadas, el próximo blog analiza específicamente la carga de la carga de struts2 modelo.setDate (nueva fecha ()); // Establezca la hora actual, porque la recepción no pasa el campo de tiempo, configúrelo aquí. System.out.println (modelo); // Información del producto Almacenamiento de productos de productos. Save (modelo); }} 2. Actualizar el producto
2.1 Actualizar la implementación de la interfaz de usuario del producto
Primero, mire el código para la parte actualizada del producto en Query.jsp:
A continuación, echemos un vistazo al contenido de update.jsp:
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 transición // en"> <html> <foad> <%@ include file = "/public/head.jspf"%> <type de estilo = "text/css" margen: 5px; } </style> <script type = "text/javascript"> $ (function () {// dataGrid Object var dg = parent. $ ("iframe [title = 'Product Management']"). Get (0) .ContentWindow. $ ("#dg"); // cargar remotamente $ ("#cc"). COMBOBOX ({// Devuelva los datos procesados a este lado para que se muestre, por lo que los antecedentes deben empaquetar los datos en formato JSON y enviarlos a URL: 'Category_Query.action', vallefield: 'id', textField: 'type', // Nuestra lista desplegable muestra el panel de nombre de la categoría del producto: 'Auto', // a la altura de la altura de la altura: 120, // La lista desplegable es un width: 120 Competiseight: Auto ', ///////////////1 subpuesto de subpuesto a la altura de la altura de la altura: anchos al mismo tiempo Editable: False, // El cuadro desplegable no permite la edición // ComboBox hereda Combo HereS ValidateBox, por lo que puede establecer la verificación directamente requerida: Verdadero, MissingMessage: 'Seleccione la categoría'}). dg.dataGrid ("getSelections"); // Cargue el campo de datos correspondiente de la fila que ingresa al formulario a echo $ ("#ff"). Form ('load', {id: filas [0] .id, nombre: filas [0] .name, precio: filas [0] .Price, observación: filas [0] .remark, xremark: ROWS [0] .xremar Abierto: filas [0] .open, 'categoría.id': filas [0] .category.id // easyUi no admite operaciones de cuentas.id de puntos, por lo que debe agregar comillas}); // Después de hacer eco de los datos, establezca la función de verificación $ ("input [name = name]"). ValidateBox ({requerido: true, faltandoMessage: 'Ingrese el nombre de la categoría'}); $ ("Entrada [Name = Price]"). NumberBox ({requerido: True, MissingMessage: 'Ingrese el precio del producto', min: 0, Precisión: 2, // retener dos decimales de prefijo: '$'}); $ ("input [name = 'fileImage.upload']"). ValidateBox ({requirido: true, falta deMessage: 'cargue la imagen del producto', // Establecer el método personalizado de válvido: "format ['gif, jpg, jpeg, png']" // Los soportes son parámetros}); $ ("TextArea [name = observación]"). ValidateBox ({requerido: true, falta deMessage: 'Ingrese una descripción simple del producto'}); $ ("TextArea [name = xremark]"). ValidateBox ({requerido: true, faltandoMessage: 'Ingrese una descripción simple del producto'}); $ ("TextArea [name = xremark]"). ValidateBox ({requerido: true, faltandoMessage: 'Ingrese una descripción simple del producto'}); // deshabilitar la verificación $ ("#ff"). Form ("DisableValidation"); // Registre el evento del botón $ ("#btn"). Click (function () {// Enable Verificación $ ("#ff"). Form ("EnableValidation"); // Si la verificación es exitosa, envíe datos if ($ ("#ff"). Form ("Validato")) {// llamando al método enviar para enviar datos de datos $ ("#ff"). 'Product_Update.Action', // Al enviar la solicitud al método de actualización de ProductAction ejecuta el éxito: Funcion () {// Si tiene éxito, cierre la ventana actual y actualice la página de los padres. }); </script> </head> <body> <form id = "ff" método = "post" enctype = "multipart/form-data"> <div> <etiqueta for = "nombre"> nombre del producto: </label> <input type = "text" name = "name"/> </div> <div> <label for = "precio"> precio del producto: </selabel> <input type = "text" name = "precio"/> <divit <bit <biv> <bit> <iv> <iv> <iv> <iv> <belt> <iv> <iv> <div> <iv> <div> <div> <iv> <div> <bit> <iv> <bit> <iv> <bit> <iv> <babel> <belt> <belt> <iv> <belt> <belt <belt> <tiv> <divir. Imagen: </selebel> <input type = "file" name = "fileImage.upload"/> </div> <div> <etiqueta for = "cuenta"> categoría de producto: </etiqueta> <!-cargando remoto data de administrador-> <input = "cc" name = "categoría.id"/> </div> <v> <lelebelebel para = "comentario"> Descripción simple: </sel etiqueta> <textarea name " ROWS = "4"> </TextAREA> </div> <div> <etiqueta for = "xremark"> Descripción detallada: </label> <textArea name = "xremark" cols = "40" Rows = "8"> </textAREA> </div> <div> <label para = "comode"> Productos recomendados: </etlabe> ye: <input type = "name =" name = "oal" No: <input type = "radio" name = "commend" value = "false" /> </div> <div> <label for = "open"> productos efectivos: </selet> listado: <input type = "radio" name = "open" value = "true" /> eliminado: <input type = "radio" name = "abre" value = "false" /> </div> <div> <div> <div = "btnn" href#"#"#"#"#"#"#"#"#"#"#" data-options = "iconcls: 'icon-edit'"> update </a> <input type = "hidden" name = "id"/> </div> `</form> </body> </html> La parte de actualización es básicamente la misma que la actualización de la categoría de producto. No lo repetiré de nuevo. La siguiente es la implementación de la parte de actualización de fondo:
2.2 Implementación de antecedentes de productos actualizados
@Controller ("ProductAction") @Scope ("Prototype") Public Class ProductAction extiende BASEACTION <Product> {// omitir otros códigos ... public void Update () lanza la excepción {// Process las imágenes cargadas, y el próximo blog analiza específicamente la carga de Struts2 File Model. // Establezca la hora actual, porque la recepción no pasa el campo de tiempo, configúrelo aquí. System.out.println (modelo); // actualizar el producto de productos de servicio.update (modelo); }} En comparación con la actualización de las categorías de productos, solo hay una operación de carga de imagen más. Necesitamos procesar imágenes cargadas en segundo plano. Analizaremos la función de carga de archivos de Struts2 en detalle en el próximo artículo.
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.