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?

83
demandé sur Cœur 2014-02-01 11:57:00

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é.

118
répondu Sotirios Delimanolis 2016-11-03 22:42:28

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>
..
16
répondu diego matos - keke 2015-01-19 16:38:34

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

"
13
répondu jax 2014-02-01 08:52:59

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é.

2
répondu krishan kansal 2016-02-01 06:11:24

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 .

-2
répondu Thiyagu 2015-11-23 11:21:34