İlkbaharda form etiketindeki modelAttribute ve commandName nitelikleri arasındaki fark nedir?


92

Bahar 3'te jsp'de form etiketinde iki farklı özellik gördüm

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

bunda modelAttribute özniteliği, özellikleri formu doldurmak için kullanılan form nesnesinin adıdır. Bunu bir form gönderirken ve denetleyicide @ModelAttributedeğeri yakalamak, doğrulayıcıyı çağırmak, iş mantığını uygulamak için kullandım. Burada her şey iyi. Şimdi

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

Bu öznitelikten beklenen şey, aynı zamanda özelliklerini dolduracağımız bir form nesnesi mi?

Yanıtlar:


127

Öğenizi destekleyen (4.3.x) kaynak kodunaFormTag bakarsanız, <form>bunu fark edeceksiniz.

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

Her ikisi de aynı alana atıfta bulunuyor, dolayısıyla aynı etkiye sahip.

Ancak alan adından da anlaşılacağı modelAttributegibi, diğerlerinin de belirttiği gibi tercih edilmelidir.


1
İyi! From etiketiyle ilgili sınıfın adını nasıl buldunuz?
Sanghyun Lee

11
@Sangdol Geleneksel olarak, sınıf sadece denir <tag-name>Tag. Tam nitelikli sınıf adı için, bu durumda .jar, etiketi içeren kitaplığı ( ) açın spring-web. Altında META-INFbulacaksınız spring-form.tld. Bir gerekecek <tag>girdisini formbir ile <tag-class>ait org.springframework.web.servlet.tags.form.FormTag.
Sotirios Delimanolis

18

OLD WAY = komutAdı

...
<spring:url value="/manage/add.do" var="action" />
    <form:form action="${action}" commandName="employee">
        <div>
            <table>
....

YENİ YOL = modelAttribute

..
<spring:url value="/manage/add.do" var="action" />
    <form:form action="${action}" modelAttribute="employee">
        <div>
            <table>
..

13

Bir süre önce aynı soruyu sormuştum, kesin farklılıkları hatırlayamıyorum ama araştırmadan bunu commandNameyapmanın eski yolu olduğunu ve yeni uygulamalarda kullanmanız gerektiğini araştırdımmodelAttribute


1

commandName = bu form hakkındaki bilgileri içeren istek kapsamındaki veya oturum kapsamındaki bir değişkenin adı veya bu, bu görünümün modelidir. Tt bir olmuştur.


-3

Xml tabanlı yapılandırmada, bir nesneyi denetleyici ve görünümler arasında geçirmek için komut sınıfını kullanacağız. Şimdi ek açıklamada kullanıyoruz modelattribute.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.