Spring의 양식 태그에서 modelAttribute와 commandName 속성의 차이점은 무엇입니까?


92

Spring 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
좋은! from 태그와 관련된 클래스 이름을 어떻게 알았습니까?
이상현

11
@ 상돌 기존 클래스는 <tag-name>Tag. 정규화 된 클래스 이름의 경우이 경우 .jar태그가 포함 된 라이브러리 ( )를 엽니 다 spring-web. 에서 META-INF찾을 수 spring-form.tld있습니다. 그것은해야합니다 <tag>에 대한 항목 formA의 <tag-class>의를 org.springframework.web.servlet.tags.form.FormTag.
Sotirios Delimanolis 2014 년

18

예전 = commandName

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

새로운 방법 = modelAttribute

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

13

얼마 전에 같은 질문을했는데 정확한 차이점은 기억 나지 않지만 연구를 통해 확인했습니다. commandName 를 통해 그것이 오래된 방법이며 새로운 응용 프로그램에서 사용해야한다는 것을 확인했습니다.modelAttribute


1

commandName =이 양식에 대한 정보를 포함하는 요청 범위 또는 세션 범위의 변수 이름 또는이보기의 모델입니다. Tt는 있어야합니다.


-3

xml 기반 구성에서는 명령 클래스를 사용하여 컨트롤러와 뷰간에 개체를 전달합니다. 이제 주석에서 우리는 modelattribute.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.