मॉडल एट्रिब्यूट और कमांडनाम के बीच अंतर वसंत में फॉर्म टैग में विशेषता है?


92

स्प्रिंग 3 में, मैंने jsp में फॉर्म टैग में दो अलग-अलग विशेषताओं को देखा है

<form:form method="post" modelAttribute="login">

इसमें विशेषता modelAttribute प्रपत्र ऑब्जेक्ट का नाम है, जिसके गुणों का उपयोग फ़ॉर्म को पॉप्युलेट करने के लिए किया जाता है। और मैंने इसे एक फॉर्म पोस्ट करने में इस्तेमाल किया और नियंत्रक में मैंने @ModelAttributeमूल्य पर कब्जा करने, सत्यापनकर्ता को कॉल करने, व्यावसायिक तर्क को लागू करने के लिए उपयोग किया है। यहाँ सब कुछ ठीक है। अभी

<form:form method="post" commandName="login">

इस विशेषता से क्या उम्मीद की जाती है, क्या यह एक फॉर्म ऑब्जेक्ट भी है जिसके गुण हम आबाद करने जा रहे हैं?

जवाबों:


127

यदि आप (4.3.x) के स्रोत कोड को देखते हैंFormTag जो आपके <form>तत्व का समर्थन करता है, तो आप इस पर ध्यान देंगे

/**
 * 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;
}

वे दोनों एक ही क्षेत्र का उल्लेख कर रहे हैं, इस प्रकार एक ही प्रभाव है।

लेकिन, जैसा कि क्षेत्र का नाम इंगित करता है, modelAttributeको प्राथमिकता दी जानी चाहिए, क्योंकि अन्य ने भी इंगित किया है।


1
अच्छा! आपको टैग से संबंधित वर्ग का नाम कैसे पता चला?
सांग्युन ली

11
@Sangdol परम्परागत रूप से, वर्ग को ही कहा जाता है <tag-name>Tag। पूरी तरह से योग्य वर्ग के नाम .jarके लिए, spring-webइस मामले में टैग युक्त पुस्तकालय ( ) खोलें । के तहत META-INF, आप पाएंगे spring-form.tld। यह एक होगा <tag>के लिए प्रवेश formएक साथ <tag-class>की org.springframework.web.servlet.tags.form.FormTag
सोतिरियोस डेलिमोलिस

18

OLD WAY = कमांडनेम

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

13

कुछ समय पहले मेरा भी यही सवाल था, मुझे सटीक अंतर याद नहीं हैं, लेकिन शोध से मुझे पता चला कि commandNameऐसा करने का पुराना तरीका था और नए अनुप्रयोगों में आपको उपयोग करना चाहिएmodelAttribute


1

कमांडनाम = अनुरोध क्षेत्र या सत्र के दायरे में एक चर का नाम जिसमें इस फॉर्म के बारे में जानकारी है, या यह इस दृश्य के लिए मॉडल है। टीटी एक होना चाहिए।


-3

Xml आधारित कॉन्फिगरेशन में, हम कंट्रोलर और व्यूज के बीच ऑब्जेक्ट पास करने के लिए कमांड क्लास का इस्तेमाल करेंगे। अब एनोटेशन में हम उपयोग कर रहे हैं modelattribute

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.