Varios métodos de unión de parámetros de SpringMVC
1. Tipo de datos básicos (tomando int como ejemplo, otros son similares):
Código del controlador:
@RequestMapping ("Sayth.do") Public void test (int count) {}Código de formulario:
<Form Action = "saysth.do" método = "post"> <input name = "count" value = "10" type = "text" />......</ form>
Si el valor de nombre de la entrada en el formulario es consistente con el nombre de la variable del parámetro del controlador, se puede completar la unión de datos. Si es inconsistente, puede usar la anotación @RequestParam. Cabe señalar que si el tipo de datos básicos se define en el parámetro del método del controlador, pero los datos enviados desde la página son nulos o "", se producirán excepciones de conversión de datos. Es decir, es necesario asegurarse de que los datos aprobados por el formulario no puedan ser nulos o "", por lo que, durante el proceso de desarrollo, es mejor definir el tipo de datos de parámetros como un tipo de embalaje para datos que pueden estar vacíos, consulte el siguiente ejemplo.
2. Tipo de embalaje (tomando entero como ejemplo, otros son similares):
Código del controlador:
@RequestMapping ("Sayth.do") Public Void Test (Count) {}Código de formulario:
<Form Action = "saysth.do" método = "post"> <input name = "count" value = "10" type = "text" />......</ form>
Básicamente es lo mismo que el tipo de datos básicos. La diferencia es que los datos aprobados por el formulario pueden ser nulos o "". El código anterior es como ejemplo. Si NUM en el formulario es "" o no hay entrada NUM en el formulario, entonces el valor NUM en el parámetro del método del controlador es nulo.
3. Tipo de objeto personalizado:
Código de modelo:
Usuario de clase pública {String private FirstName; cadena privada lastname; public String getFirstName () {return FirstName; } public void setFirstName (String FirstName) {this.firstname = firstName; } public String getLastName () {return LastName; } public void setLastName (String LastName) {this.lastName = lastName; }}Código del controlador:
@RequestMapping ("Sayth.do") Public void test (usuario de usuario) {}Código de formulario:
<Form Action = "saysth.do" método = "post"> <input name = "FirstName" value = "zhang" type = "text"/> <input name = "LastName" value = "tres" type = "text" />......</ form>
Es muy simple, simplemente coincida con el nombre de la propiedad del objeto y el valor del nombre de la entrada uno por uno.
4. Personalizar el tipo de objeto compuesto:
Código de modelo:
clase pública ContactInfo {private String Tel; dirección de cadena privada; public String getTel () {return tel; } public void Settel (String Tel) {this.tel = Tel; } public String getAddress () {Dirección de retorno; } public void setAddress (dirección de cadena) {this.address = dirección; }} Usuario de clase pública {String private FirstName; cadena privada lastname; Contactinfo privado ContactInfo; public String getFirstName () {return FirstName; } public void setFirstName (String FirstName) {this.firstname = firstName; } public String getLastName () {return LastName; } public void setLastName (String LastName) {this.lastName = lastName; } public contactInfo getContactInfo () {return contactInfo; } public void setContactInfo (ContactInfo ContactInfo) {this.ContactInfo = ContactInfo; }} Código del controlador:
@RequestMapping ("Sayth.do") Public void test (usuario de usuario) {System.out.println (user.getFirstName ()); System.out.println (user.getLastName ()); System.out.println (user.getContactInfo (). GetTel ()); System.out.println (user.getContactInfo (). GetAddress ());} Código de formulario:
<form action="saysth.do" method="post"><input name="firstName" value="Zhang" /><br><input name="lastName" value="Three" /><br><input name="contactInfo.tel" value="13809908909" /><br><input name="contactInfo.address" value="Beijing Haidian" /> <br> <input type = "Subt" Value = "Save" /> </form>
Hay un atributo ContactInfo en el objeto de usuario. El código en el controlador es consistente con lo que se dice en el punto 3. Sin embargo, en el código de formulario, debe usar "Nombre del atributo (atributo del tipo de objeto). Attribute Nombre" para nombrar el nombre de entrada.
5. Lista vinculante:
La lista debe estar vinculada al objeto y no se puede escribir directamente en los parámetros del método del controlador.
Código de modelo:
Usuario de clase pública {String private FirstName; cadena privada lastname; public String getFirstName () {return FirstName; } public void setFirstName (String FirstName) {this.firstname = firstName; } public String getLastName () {return LastName; } public void setLastName (String LastName) {this.lastName = lastName; }} public class UserListform {private List <serem> usuarios; Lista pública <serem> getUsers () {return users; } public void setUsers (list <serem> usuarios) {this.users = users; }} Código del controlador:
@RequestMapping ("Sayth.do") public void test (userListform userForm) {for (user user: userform.getusers ()) {system.out.println (user.getFirstName () + " -" + user.getLastName ()); }}Código de formulario:
<Form Action = "saysth.do" método = "post"> <table> <thead> <tr> <th> nombre de primer </th> <th> apellido </th> </tr> </thead> <tfoot> <tr> <tr> <td colsspan = "2"> <input type = "enviar" value = "guardar"/> </td> </tr> <tfoot> <tbody> name = "usuarios [0] .FirstName" value = "aaa"/> </td> <td> <input name = "usuarios [0] .lastName" value = "bbb"/> </td> </tr> <tr> <td> <input name = "usuarios [1] .firstname" value = "ccc"/> </td> <td> <td> name = "Users [1] .lastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "usuarios [2] .firstname" valor = "eee"/> </td> <td> <input name = "usuarios [2] .lastName" value = "fff"/> </td> </tr> </TBOY
De hecho, esto es algo similar al enlace de los datos contantinfo en el objeto de usuario en el cuarto punto, pero las propiedades en el objeto de información de usuario aquí se definen como una lista, en lugar de objetos personalizados ordinarios. Por lo tanto, debe especificar el subíndice de la lista en el formulario. Vale la pena mencionar que Spring creará un objeto de lista con el valor máximo de subíndice como tamaño. Por lo tanto, si hay adición dinámica y eliminación de filas en la forma, se debe prestar atención especial. Por ejemplo, después de utilizar una tabla, el valor del subíndice será inconsistente con el tamaño real después de que el usuario elimine las filas y agrega filas varias veces durante el uso. En este momento, solo los objetos en la lista tendrán valores en el formulario que tienen subíndices, de lo contrario será nulo. Ver un ejemplo:
Código de formulario:
<Form Action = "saysth.do" método = "post"> <table> <thead> <tr> <th> nombre de primer </th> <th> apellido </th> </tr> </thead> <tfoot> <tr> <tr> <td colsspan = "2"> <input type = "enviar" value = "guardar"/> </td> </tr> <tfoot> <tbody> name = "usuarios [0] .FirstName" value = "aaa"/> </td> <td> <input name = "usuarios [0] .lastName" value = "bbb"/> </td> </tr> <tr> <td> <input name = "usuarios [1] .firstname" value = "ccc"/> </td> <td> <td> name = "Users [1] .lastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "usuarios [20] .firstname" valor = "eee"/> </td> <td> <input name = "usuarios [20] .lastName" value = "fff"/> </td> <tr> </TBOY
En este momento, UserForm.getUsers () en el controlador obtiene el tamaño de la lista para ser 21, y ninguno de estos 21 objetos de usuario es nulo, pero el nombre y el nombre de último nombre en los objetos de usuario de 2 a 19 son nulos. Resultado de impresión:
aaa - bbbccc - dddnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullee - fff
6. Establezca vinculación:
SET es similar a la lista, y también debe estar vinculado al objeto, y no se puede escribir directamente en los parámetros del método del controlador. Sin embargo, al enlace los datos establecidos, el número correspondiente de objetos modelo debe agregarse primero en el objeto establecido.
Código de modelo:
Usuario de clase pública {String private FirstName; cadena privada lastname; public String getFirstName () {return FirstName; } public void setFirstName (String FirstName) {this.firstname = firstName; } public String getLastName () {return LastName; } public void setLastName (String LastName) {this.lastName = lastName; }} public class UserSetForm {private set <serer> users = new Hashset <serer> (); Public UserSetForm () {Users.Add (nuevo usuario ()); ussers.add (nuevo usuario ()); ussers.add (nuevo usuario ()); } set público <serem> getUsers () {return users; } public void setUsers (set <serem> users) {this.users = users; }}Código del controlador:
@RequestMapping ("Sayth.do") public void test (UserSetForm UserForm) {for (User User: userForm.getUsers ()) {System.out.println (user.getFirstName () + " -" + user.getLastName ()); }}Código de formulario:
<Form Action = "saysth.do" método = "post"> <table> <thead> <tr> <th> nombre de primer </th> <th> apellido </th> </tr> </thead> <tfoot> <tr> <tr> <td colsspan = "2"> <input type = "enviar" value = "guardar"/> </td> </tr> <tfoot> <tbody> name = "usuarios [0] .FirstName" value = "aaa"/> </td> <td> <input name = "usuarios [0] .lastName" value = "bbb"/> </td> </tr> <tr> <td> <input name = "usuarios [1] .firstname" value = "ccc"/> </td> <td> <td> name = "Users [1] .lastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "usuarios [2] .firstname" valor = "eee"/> </td> <td> <input name = "usuarios [2] .lastName" value = "fff"/> </td> </tr> </TBOY
Básicamente similar a la vinculación de la lista.
Cabe señalar que si el valor máximo del subíndice es mayor que el tamaño del conjunto, se lanzará un org.springframework.beans.invalidPropertyException. Por lo tanto, es un poco inconveniente cuando lo usa.
7. Enlace del mapa:
El mapa es el más flexible. También debe estar vinculado al objeto y no puede escribirse directamente en los parámetros del método del controlador.
Código de modelo:
Usuario de clase pública {String private FirstName; cadena privada lastname; public String getFirstName () {return FirstName; } public void setFirstName (String FirstName) {this.firstname = firstName; } public String getLastName () {return LastName; } public void setLastName (String LastName) {this.lastName = lastName; }} clase pública usermapform {Map privado <string, user> users; Mapa público <string, user> getUsers () {return users; } public void setUsers (map <string, user> users) {this.users = users; }} Código del controlador:
@RequestMapping ("Sayth.do") public void test (usermapform userForm) {for (map.entry <string, user> Entry: userForm.getUsers (). EntrySet ()) {System.out.println (Entry.getKey () + ":" + Entry.getValue (). GetFirstName () + " -" + Entrada. }} Código de formulario:
<Form Action = "saysth.do" método = "post"> <table> <thead> <tr> <th> nombre de primer </th> <th> apellido </th> </tr> </thead> <tfoot> <tr> <tr> <td colsspan = "2"> <input type = "enviar" value = "guardar"/> </td> </tr> <tfoot> <tbody> nombre = "usuarios ['x']. FirstName" value = "aaa"/> </td> <td> <input name = "users ['x']. LastName" value = "bbb"/> </td> </tr> <tr> <td> <input name = "uss ['y']. FirstName" Value = "CCC"/> </td> <TD> name = "Users ['y']. LastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "users ['z']. FirstName" Value = "eee"/> </td> <td> <input name = "usuarios ['z']. LastName" Value = "ffff" " /> </td> </tr> </tbody> </table> </form>
Resultado de impresión:
X: AAA - BBBY: CCC - DDDZ: EEE - FFF
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.