Vários métodos de ligação de parâmetros de springmvc
1. Tipo de dados básico (tomando int como um exemplo, outros são semelhantes):
Código do controlador:
@RequestMapping ("Sayth.do") Teste public void (int contagem) {}Código do formulário:
<form action = "dizth.do" método = "post"> <nome de entrada = "count" value = "10" type = "text" /> ...
Se o valor do nome da entrada no formulário for consistente com o nome da variável de parâmetro do controlador, a ligação de dados poderá ser concluída. Se for inconsistente, você pode usar a anotação @RequestParam. Deve -se notar que, se o tipo de dados básico estiver definido no parâmetro do método do controlador, mas os dados enviados da página forem nulos ou "", ocorrerão exceções de conversão de dados. Ou seja, é necessário garantir que os dados passados pelo formulário não possam ser nulos ou ""; portanto, durante o processo de desenvolvimento, é melhor definir o tipo de dados do parâmetro como um tipo de embalagem para dados que podem estar vazios, consulte o exemplo a seguir.
2. Tipo de embalagem (tomando o número inteiro como exemplo, outros são semelhantes):
Código do controlador:
@RequestMapping ("Sayth.do") Teste de void public (contagem inteira) {}Código do formulário:
<form action = "dizth.do" método = "post"> <nome de entrada = "count" value = "10" type = "text" /> ...
É basicamente o mesmo que o tipo de dados básico. A diferença é que os dados passados pelo formulário podem ser nulos ou "". O código acima é como exemplo. Se NUM no formulário for "" ou não houver entrada NUM no formulário, o valor NUM no parâmetro do método do controlador será nulo.
3. Tipo de objeto personalizado:
Código do modelo:
Public class Usuário {private String FirstName; string privada stringname; 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 do controlador:
@RequestMapping ("Sayth.do") Teste public void (usuário do usuário) {}Código do formulário:
<form action = "dizth.do" method = "post"> <input name = "primeironame" value = "zhang" type = "text"/> <input name = "lastName" value = "três" type = "text" /> ...
É muito simples, basta corresponder ao nome da propriedade do objeto e ao nome do nome da entrada um por um.
4. Personalize o tipo de objeto composto:
Código do modelo:
classe pública ContactInfo {private String tel; endereço de string privado; public string gettel () {return tel; } public void Settel (String Tel) {this.Tel = Tel; } public string getAddress () {retornar endereço; } public void setAddress (endereço da string) {this.address = endereço; }} public class Usuário {private String FirstName; string privada stringname; ContactInfo 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 do controlador:
@RequestMapping ("Sayth.do") Teste public void (usuário do usuário) {System.out.println (user.getfirstname ()); System.out.println (user.getLastName ()); System.out.println (user.getContactinfo (). Gettel ()); System.out.println (user.getContactinfo (). GetAddress ());} Código do formulário:
<form action = "dizth.do" method = "post"> <input name = "primeironame" value = "zhang" /> <br> <input name = "lastName" value = "três" /> <br> <nome de entrada = "contactInfo.Tel" Value = "1380908909" /> <br> /> <br> <input type = "submit" value = "salvar" /> </morm>
Há um atributo contactInfo no objeto do usuário. O código no controlador é consistente com o que é dito no ponto 3. No entanto, no código do formulário, você precisa usar "Nome do atributo (atributo do tipo de objeto) .tribute Nome" para nomear o nome de entrada.
5. Lista de ligação:
A lista precisa estar vinculada ao objeto e não pode ser gravada diretamente nos parâmetros do método do controlador.
Código do modelo:
Public class Usuário {private String FirstName; string privada stringname; 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; }} classe pública userlistform {private list <souser> usuários; list public <suser> getUsers () {retornar usuários; } public void SetUsers (list <suser> usuários) {this.users = usuários; }} Código do controlador:
@RequestMapping ("Sayth.do") Test public void (UserListForm UserForm) {for (Usuário do usuário: UserForm.getUsers ()) {System.out.println (user.getfirstname () + " -" + user.getLastName ()); }}Código do formulário:
<form action = "diz. name = "usuários [0] .FirstName" value = "aaa"/> </td> <td> <name de entrada = "usuários [0] .LASTNAME" value = "bbb"/> </td> </tr> <tr> <td> <input name = "usuários [1] .firstname" "" "cc"/td <td> <input name = "usuários [1] .firstname" "" cc "/td <td> <input name =" usuários [1] .firstname "" "cc"/<td> <input name = "usuários [1] .firstname" "" cc "/td" cc <td> <input name = "usuários [1] .firstname" "" cc "/input (1]. name = "usuários [1] .LastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "usuários [2] .firstname" value = "eee"/> </td> <td> <input name = "usuários [2] .LastName" = "fff" " /> </td> </tr> </tbody> </tabela> </morm>
De fato, isso é um pouco semelhante à ligação dos dados do Contantinfo no objeto do usuário no quarto ponto, mas as propriedades no objeto UserListform aqui são definidas como lista, em vez de objetos personalizados comuns. Portanto, você precisa especificar o subscrito da lista no formulário. Vale ressaltar que a primavera criará um objeto de lista com o valor máximo do subscrito como tamanho. Portanto, se houver adição e exclusão dinâmica de linhas no formulário, deve ser dada atenção especial. Por exemplo, depois que uma tabela for usada, o valor do subscrito será inconsistente com o tamanho real depois que o usuário excluir linhas e adicionar linhas várias vezes durante o uso. No momento, apenas os objetos na lista terão valores no formulário que possuem subscritos, caso contrário, será nulo. Veja um exemplo:
Código do formulário:
<form action = "diz. name = "usuários [0] .FirstName" value = "aaa"/> </td> <td> <name de entrada = "usuários [0] .LASTNAME" value = "bbb"/> </td> </tr> <tr> <td> <input name = "usuários [1] .firstname" "" "cc"/td <td> <input name = "usuários [1] .firstname" "" cc "/td <td> <input name =" usuários [1] .firstname "" "cc"/<td> <input name = "usuários [1] .firstname" "" cc "/td" cc <td> <input name = "usuários [1] .firstname" "" cc "/input (1]. name = "Usuários [1] .LastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "usuários [20] .firstname" value = "eee"/> </td> <td> <input name = "[20] .LastName value" = "fff" " /> </td> </tr> </tbody> </tabela> </morm>
No momento, o userForm.getUsers () no controlador obtém o tamanho da lista em 21 anos, e nenhum desses 21 objetos de usuário é nulo, mas o primeiro nome e o último nome nos objetos do usuário de 2 a 19 são nulos. Resultado de impressão:
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. Defina a ligação:
O conjunto é semelhante à lista e também precisa estar vinculado ao objeto e não pode ser escrito diretamente nos parâmetros do método do controlador. No entanto, ao vincular dados do Definir, o número correspondente de objetos de modelo deve ser adicionado primeiro no objeto Set.
Código do modelo:
Public class Usuário {private String FirstName; string privada stringname; 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; }} classe pública UsertEtform {private Set <suser> usuários = novo hashset <suser> (); public userSetForm () {users.add (new user ()); users.add (new user ()); users.add (new user ()); } public set <suser> getUsers () {return users; } public void SetUsers (set <suser> usuários) {this.users = usuários; }}Código do controlador:
@RequestMapping ("Sayth.do") Test public void (UserSetForm UserForm) {for (Usuário: userForm.getUsers ()) {System.out.println (user.getFirstName () + " -" + user.getLastName ()); }}Código do formulário:
<form action = "diz. name = "usuários [0] .FirstName" value = "aaa"/> </td> <td> <name de entrada = "usuários [0] .LASTNAME" value = "bbb"/> </td> </tr> <tr> <td> <input name = "usuários [1] .firstname" "" "cc"/td <td> <input name = "usuários [1] .firstname" "" cc "/td <td> <input name =" usuários [1] .firstname "" "cc"/<td> <input name = "usuários [1] .firstname" "" cc "/td" cc <td> <input name = "usuários [1] .firstname" "" cc "/input (1]. name = "usuários [1] .LastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "usuários [2] .firstname" value = "eee"/> </td> <td> <input name = "usuários [2] .LastName" = "fff" " /> </td> </tr> </tbody> </tabela> </morm>
Basicamente semelhante à ligação da lista.
Deve -se notar que, se o valor máximo do subscrito for maior que o tamanho do conjunto, um org.springframework.beans.invalidPropertyException será lançado. Portanto, é um pouco inconveniente ao usá -lo.
7. Ligação do mapa:
O mapa é o mais flexível. Ele também precisa estar ligado ao objeto e não pode ser escrito diretamente nos parâmetros do método do controlador.
Código do modelo:
Public class Usuário {private String FirstName; string privada stringname; 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; }} classe pública UserMapform {private mapa <string, usuário> usuários; mapa público <string, usuário> getUsers () {return users; } public void SetUsers (map <string, usuário> usuários) {this.users = usuários; }} Código do controlador:
@RequestMapping ("Sayth.do") Test public void (UserMApform UserForm) {for (map.entry <string, usuário> entrada: userForm.getUsers (). EntrySet ()) {System.out.println (entrada.getKey () + ":" + Entry.getValue (). }} Código do formulário:
<form action = "diz. name = "usuários ['x']. primeironame" value = "aaa"/> </td> <td> <name de entrada = "usuários ['x']. lastName" value = "bbb"/> </td> </tr> <tr> <td> <input name = "[''. name = "usuários ['y']. lastName" value = "ddd"/> </td> </tr> <td> <td> <input name = "usuários ['z']. primeironame" value = "eee"/> </td> <td> <input name = "usuários ['z']. /> </td> </tr> </tbody> </tabela> </morm>
Resultado de impressão:
x: aaa - bbby: ccc - dddz: eee - fff
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.