Différence entre les attributs modelAttribute et commandName dans la balise form au printemps?
Au Printemps les 3, j'ai vu deux d'attribut dans la balise form en jsp
<form:form method="post" modelAttribute="login">
dans ce l'attribut modelAttribute est le nom de l'objet de forme dont les propriétés sont utilisées pour peupler la forme. Et je l'ai utilisé pour poster un formulaire et dans controller j'ai utilisé @ModelAttribute
pour capturer la valeur, appeler validateur, appliquer la logique d'affaires. Tout va bien ici. Maintenant
<form:form method="post" commandName="login">
Ce qui est attendu par cet attribut, est-il également un objet dont les propriétés nous allons remplir?
5 réponses
si vous regardez le code source de FormTag
(4.3.x) qui supporte votre élément <form>
, vous remarquerez ce
/**
* 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 se réfèrent tous deux au même champ, ayant donc le même effet.
Mais, comme le champ nom l'indique, modelAttribute
doit être préféré, comme d'autres l'ont également souligné.
OLD WAY = commandName
...
<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'ai eu la même question il y a un certain temps, Je ne me souviens pas des différences exactes mais de la recherche j'ai vérifié que commandName
était la vieille façon de le faire et dans de nouvelles applications, vous devriez être en utilisant modelAttribute
commandName = nom d'une variable dans la requête scope ou session scope qui contient les informations sur ce formulaire,ou Ce modèle pour cette vue. Tt devrait être un yé.
dans la config basée sur xml, nous utiliserons la classe de commande pour passer un objet entre le controller et les vues. Maintenant dans l'annotation nous utilisons modelattribute
.