Au printemps 3, j'ai vu deux attributs différents dans une balise de formulaire dans jsp
<form:form method="post" modelAttribute="login">
dans cet attribut modelAttribute est le nom de l'objet de formulaire dont les propriétés sont utilisées pour remplir le formulaire. Et je l'ai utilisé pour poster un formulaire et dans le contrôleur, j'ai utilisé @ModelAttribute
pour capturer une valeur, appeler un validateur, appliquer une logique métier. Tout va bien ici. Maintenant
<form:form method="post" commandName="login">
Qu'attend cet attribut? S'agit-il également d'un objet de formulaire dont nous allons renseigner les propriétés?
Si vous regardez le code source de FormTag
(4.3.x) qui sauvegarde votre <form>
élément, vous remarquerez ceci
/**
* Set the name of the form attribute in the model.
* <p>May be a runtime expression.
*/
public void setModelAttribute(String modelAttribute) {
this.modelAttribute = modelAttribute;
}
/**
* Get the name of the form attribute in the model.
*/
protected String getModelAttribute() {
return this.modelAttribute;
}
/**
* Set the name of the form attribute in the model.
* <p>May be a runtime expression.
* @see #setModelAttribute
*/
public void setCommandName(String commandName) {
this.modelAttribute = commandName;
}
/**
* Get the name of the form attribute in the model.
* @see #getModelAttribute
*/
protected String getCommandName() {
return this.modelAttribute;
}
Ils font tous les deux référence au même champ, ayant ainsi le même effet.
Mais, comme le nom du champ l'indique, il faut préférer modelAttribute
, comme d'autres l'ont également souligné.
OLD WAY = nomCommande
...
<spring:url value="/manage/add.do" var="action" />
<form:form action="${action}" commandName="employee">
<div>
<table>
....
NEW WAY = modelAttribute
..
<spring:url value="/manage/add.do" var="action" />
<form:form action="${action}" modelAttribute="employee">
<div>
<table>
..
J'avais la même question il y a quelque temps, je ne me souviens pas des différences exactes, mais d'après des recherches, j'ai constaté que commandName
était l'ancienne manière de procéder. Dans les nouvelles applications, vous devriez utiliser modelAttribute
commandName = nom d'une variable de la portée de la demande ou de la session contenant les informations relatives à ce formulaire ou modèle pour cette vue. Cela devrait être un été.