Prefacio
¿Por qué escribir convertidor en Struts2?
: Struts2 solo puede proporcionar una conversión automática para 8 tipos originales en Java y tipos comunes como cadena y fecha.
Pero esto definitivamente no puede satisfacer nuestras necesidades si queremos integrar los datos de la página en un Javabean. Cuando va a la acción, lo que obtiene la acción es un objeto, por lo que este requisito requiere que usemos un convertidor de tipo.
La mayoría de las veces, el uso del convertidor de tipo incorporado y el convertidor de tipo basado en OGNL proporcionado por el marco Struts2 pueden satisfacer la mayoría de las necesidades de conversión de tipo; Sin embargo, hay algunos casos especiales en los que una cadena de un formato especificado puede necesitar convertirse en un objeto compuesto, y se requiere un convertidor de tipo personalizado. Por ejemplo, si el cliente envía una cadena como "Jelly | 123456" al servidor, necesitamos convertir esta cadena en una instancia de tipo de usuario, con "Jelly" como nombre de usuario y "123456" como la contraseña del usuario.
Clase de conversión de tipo personalizado
Hay una página de recepción como esta:
<Form Action = "Login" Method = "Post"> User: <input type = "text" name = "UserInfo"> <br> <input type = "subt" value = "convert"> </form>
El código de acción correspondiente es:
Usuario privado de usuario; // Este es un consejo de cadena privada de tipo compuesto; public void setUsers (usuario de usuario) {this.user = user;} public user getUser () {return user;}Esperamos que el usuario ingrese una cadena en la página de primer plano con el formato "nombre de usuario | contraseña" y convierta la cadena en formato de "nombre de usuario | contraseña" al tipo de usuario a través de un convertidor de tipo personalizado. Hablemos sobre cómo implementar un convertidor de tipo personalizado.
El convertidor de tipo de Struts2 todavía se basa en el marco OGNL. Hay una interfaz typeconverter en el proyecto OGNL, que es la interfaz que debe ser implementada por un convertidor de tipo personalizado. El código de definición de esta interfaz es el siguiente:
// Ognl proporciona interfaz pública typeconverter {public Object ConverValue (contexto de mapa, objetivo de objeto, miembro miembro, string PropertyName, Object Value, class Totype);}Para implementar un convertidor de tipo, debe implementar el typeconverter anterior, pero los métodos en la interfaz anterior son demasiado complejos, por lo que el proyecto OGNL también proporciona una clase de implementación para esta interfaz: defaultTyPeConverter, que generalmente usa esta clase extendida para implementar convertidores de tipo personalizado. La implementación de un convertidor de tipo personalizado requiere anular el método Convervalue de la clase predeterminada de PeConverter.
La siguiente es la clase de conversión convertida a una instancia de clase de usuario:
Public Class UsercOnverter extiende predeterminando a los valores predeterminados {public object convertValue (contexto de map, valor de objeto, class Totype) {if (Totype == user.class) {// Cuando necesita convertir una cadena en el tipo de usuario // el parámetro de solicitud del sistema es un valor de cadena de cadena [] params = (string []); // Cree un usuario de usuario de instancia de usuario = new User (); // Solo procesa el primer elemento de matriz de la matriz de parámetros de solicitud y divide la cadena en dos cadenas con el '|' Symbol String [] uservalues = params [0] .split ("// |"); // asignar un valor a la instancia de usuario user.setName (uservalues [0]); user.setPassword (uservalues [1]); devolver el usuario; } else if (totype == string.class) {// Cuando necesita convertir el tipo de usuario en un valor de usuario de String user = (usuario); return "<" + user.getName () + "|" + user.getPassword () + ">"; } return null; }}La función del método ConverValue es muy simple. Este método es responsable de completar la conversión de tipo, pero esta conversión es bidireccional. El tipo de destino se juzga en función del parámetro Totype, y luego podemos implementar la lógica de conversión en dos direcciones.
Registre un convertidor de tipo
Tener un convertidor de tipo no es suficiente, porque el marco Struts2 no sabe cuándo usar este tipo convertidores, por lo que el convertidor de tipo debe estar registrado en la aplicación web, por lo que el marco Struts2 puede usar este convertidor de tipo normalmente.
Struts2 admite principalmente las siguientes dos formas de registrar convertidores de tipo:
Hablemos sobre los dos métodos anteriores para registrar convertidores de tipo.
Convertidor de tipo local
STRUTS2 permite a los desarrolladores especificar la información de configuración para la conversión de tipo a través de archivos de conversión de tipo local. Un archivo de conversión de tipo es un archivo de propiedades ordinarias (*.properties). El nombre del archivo del archivo de conversión de tipo local debe estar en el formulario ActionName -Conversion.Properties, donde ActionName es el nombre de acción que debe convertirse en el archivo con este tipo, y la cadena posterior -Conversion.Properties es una parte fija. El archivo de conversión de tipo debe colocarse en la misma ubicación que el archivo de clase de acción.
Después de hablar sobre el archivo de conversión de tipo local, continuemos hablando sobre el convertidor de tipo local registrado. Para registrar un convertidor de tipo local, solo necesita agregar la siguiente línea de configuración al archivo de convertidor de tipo local:
<Propname> = <ConverterClass>
Reemplace la anterior <PropName> con la propiedad que debe ser convertida de tipo y reemplazar <ConverterClass> con la clase de implementación del convertidor de tipo. Para la clase UserConverter implementada anteriormente, es necesario configurarlo en el archivo de conversión de tipo local de la siguiente manera:
# Para especificar el atributo de usuario, debe utilizar la clase UserConverter para completar el usuario de conversión de tipo = com.jellyThink.practise.useConverter
Convertidor de tipo global
Las limitaciones de los convertidores de tipo local son demasiado obvias, y solo pueden trabajar en acciones especificadas y propiedades especificadas. Sin embargo, si múltiples acciones en la aplicación contienen atributos del tipo de usuario, o una acción contiene atributos del tipo de usuario múltiple, sería más apropiado usar un convertidor de tipo global.
El convertidor de tipo global no funciona en las propiedades especificadas de la acción especificada, sino en el tipo especificado. Por ejemplo, funciona para todas las propiedades del tipo com.jellythink.practise.user.
El registro de un convertidor de tipo global debe proporcionar un archivo Xwork-Conversion.Properties, que es el archivo de convertidor de tipo global. Debe colocar directamente el archivo en la ruta web-INF/classes de la aplicación web.
El contenido del archivo de conversión de tipo global consiste en múltiples elementos <PropType> = <SvertClass>. Reemplace la proptype con el tipo que debe convertirse tipo y reemplace convertirClass con la clase de implementación del convertidor de tipo. Para la clase UserConverter implementada anteriormente, es necesario configurarlo en el archivo de conversión de tipo global de la siguiente manera:
com.jellythink.practise.user = com.jellythink.practise.userconverter
"Local" vs "global"
La conversión de tipo local solo puede convertir el atributo especificado de la acción especificada. Independientemente de si el atributo de la acción es una matriz o un tipo de colección, el método de conversión del convertidor solo convierte el atributo una vez. Si una acción tiene un usuario de la propiedad de la lista <serve>, el convertidor de tipo local llamará al método ConverValue () solo una vez, que convierte el parámetro de solicitud de los usuarios en un objeto de recolección de la lista <seremectivo> a la vez.
El convertidor de tipo global convertirá todos los tipos específicos de la acción. Si el atributo de una acción es un tipo de matriz o colección, y el elemento matriz o colección es el método que requiere que el convertidor se convierta, entonces el convertidor de tipo global no convertirá el atributo completo de configuración, pero convertirá cada elemento del atributo establecido. Es decir, cuando el atributo es una matriz o colección, la matriz o colección contiene varios elementos del tipo, entonces el método ConverValue () se llamará varias veces.
Después de familiarizarme con la diferencia entre los dos, le prestaré más atención en mi trabajo futuro; Especialmente la diferencia entre la matriz y establecer elementos al convertirlos.
Converter de tipo personalizado basado en Struts2
Lo anterior introduce la dirección de conversión heredando la clase predeterminada de PeConverter, en un método ConvertValue, la dirección de conversión se juzga al juzgar el parámetro TOTYPE, y luego la lógica de conversión para diferentes direcciones de conversión se implementa por separado. En el marco Struts2, para simplificar la implementación de los convertidores de tipo, se proporciona una clase abstracta de StrutSpeconverter, que es una subclase de la clase de TyePeConverter predeterminada. Ha implementado el método ConverValue de la clase predeterminada de PeConverter; Al implementar este método, convierte la conversión en dos direcciones diferentes juzgando el parámetro TOTYPE en el método ConverValue para llamar a los siguientes dos métodos diferentes:
Lo que debemos hacer es heredar la clase abstracta de StrutSpeconverter e implementar los dos métodos abstractos: ConvertFromString and ConvertToString.
El código modificado es el siguiente:
Public Class Userconverter extiende StrutStyPeconverter {public Object ConvertFromString (contexto de map, valores [], class ToClass) {user user = new User (); String [] uservalues = valores [0] .split ("// |"); user.setName (uservalues [0]); user.setPassword (uservalues [1]); devolver el usuario; } public String ConvertToString (contexto de mapa, objeto O) {// Cuando es necesario convertir el tipo de usuario en un usuario de String User = (usuario) o; return "<" + user.getName () + "|" + user.getPassword () + ">"; }}Resumir
Este artículo resume el convertidor de tipo personalizado en Struts2 en detalle, y la idea general es la siguiente:
Solo unos pocos pasos para hacer el convertidor de tipo personalizado.
De acuerdo, lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.