3

每当我使用#springFormInput喜欢:

#springFormInput("command.name")

我得到 ID 设置为的标记name

<input type="text" id="name" ... />

在许多情况下,我想要像“类别”或“名称”这样的短名称,而且我不喜欢在 ID 中包含它们(这应该是唯一的)。如何指示 Spring 为元素使用不同的 ID?

我试过类似的东西:

#springFormInput("command.name" 'id="myid" data-zaza="test"')

...但我的 ID 仍然被覆盖:

<input type="text" id="name" data-zaza="test" ... />

我希望它改为发射id="myid"

4

1 回答 1

0

你不能。看一下宏的代码:

#**
 * springFormInput
 *
 * Display a form input field of type 'text' and bind it to an attribute
 * of a command or bean.
 *
 * @param path the name of the field to bind to
 * @param attributes any additional attributes for the element (such as class
 *    or CSS styles or size
 *
 *#
#macro( springFormInput $path $attributes )
    #springBind($path)
    <input type="text" id="${status.expression}" name="${status.expression}"
                            value="$!status.value" ${attributes}#springCloseTag()
#end

因此,如您所见,使用#springFormInput("command.name" 'id="myid" data-zaza="test"')实际生成:

<input type="text" id="name" id="myid" data-zaza="test" />

但是velocity会清除重复的ID,只留下第一个(id="name")。


当您进行测试时,这种“消除”行为变得清晰。例如,手动声明:

<input type="text" id="testA" id="testB" id="testC" name="myTest" value="test!">

生成的 HTML 中的内容是:

<input type="text" id="testA" name="myTest" value="test!">


作为替代方案,您可以显式使用宏代码,生成您需要的内容:

#springBind("command.name")
<input type="text" id="myid" name="${status.expression}"
                         value="$!status.value" data-zaza="test"#springCloseTag()

${status.expression}$!status.value设置在#springBind宏中,不用担心它们。

于 2013-06-07T23:29:26.373 回答