атрибут модели spring внутри тега jsp 2.0

На мой взгляд, у меня есть простая форма, которая работает:

<form:form modelAttribute="user" >
        <form:input path="lastName"/> <br/>
    </form:form>

Я пытаюсь создать тег для создания моей формы следующим образом:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<%@ attribute name="model" required="true" type="com.myObject"%>
    <form:form modelAttribute="model" >

        <form:input path="lastName"/> <br/>

    </form:form>

называется так:

<%@ taglib prefix="ahead" tagdir="/WEB-INF/tags" %>
<ahead:form model="${user}"></ahead:form>

Но он выдает исключение: ни BindingResult, ни простой целевой объект для имени bean-компонента «модель» не доступны в качестве атрибута запроса.

Если в моем теге я напишу это:

<form:form modelAttribute="user" >

это работает, потому что я думаю, что он находит атрибут «пользователь» в модели

Но я хочу использовать атрибут "модель":

<%@ attribute name="model" required="true" type="com.myObject"%>

потому что он не всегда будет называться одним и тем же в модели.

Как я могу этого добиться?

Спасибо


person jpprade    schedule 07.01.2014    source источник
comment
В настоящее время ваша форма всегда ищет атрибут с именем «модель», вы должны использовать «$ {модель}», чтобы заменить его переданным значением. В настоящее время он жестко закодирован для model.   -  person M. Deinum    schedule 07.01.2014
comment
@ M.Deinum Разве элемент Spring <form:form> не принимает имя атрибута запроса для атрибутов modelAttribute и commandName?   -  person Sotirios Delimanolis    schedule 07.01.2014
comment
Благодаря M. Deinum я знал, что был недалеко! Не могли бы вы добавить свой комментарий в качестве ответа, чтобы я мог его принять!   -  person jpprade    schedule 07.01.2014
comment
@SotiriosDelimanolis да, но если вы хотите заполнить его динамически, вам придется использовать выражение вместо жестко закодированного значения.   -  person M. Deinum    schedule 07.01.2014
comment
@ M.Deinum О, я неправильно понял вопрос. model предназначен для хранения имени используемого атрибута.   -  person Sotirios Delimanolis    schedule 07.01.2014


Ответы (1)


<form:form modelAttribute="model" >

Ваша текущая реализация тега имеет жестко запрограммированное имя для свойства modelAttribute, оно всегда будет model независимо от значения переданного атрибута.

Чтобы сделать его динамическим, используйте выражение вместо жестко запрограммированного значения.

<form:form modelAttribute="${model}" >

Это заменит выражение значением переданного атрибута с именем model.

person M. Deinum    schedule 07.01.2014