使用<s:set>动态构建元素的名称

时间:2015-06-04 14:24:54

标签: jsp struts2 iterator ognl struts-tags

我想重用一组HTML字段元素,并使用struts build&#39; name&#39;来自变量的属性。我看到了这个How To Generate unique HTML id attributes within Struts 2 iterator tag,并认为我可以使用类似的东西,但不能让它起作用。似乎我只能在迭代器循环中从struts变量构建一个name属性。我怎么能用一个简单的变量呢?

这是我的代码,首先尝试使用变量,第二个使用迭代器:

<s:set var="type" value="Main" />
<s:textfield name="prefix%{#type}.Name"/>

<s:set var="AList" value="{'Main'}" />
<s:iterator value="AList" var="Ltype">
    <s:textfield name="prefix%{#Ltype}.Name"/>
</s:iterator>

这会生成2个元素:

<input type="text" name="prefix.Name"     value="">
<input type="text" name="prefixMain.Name" value="">

第一个没有替换变量,迭代器循环工作。

为什么它不起作用,我该怎么做?

1 个答案:

答案 0 :(得分:3)

您要为第一个变量指定,而不是字符串文字, 并且由于您的ValueStack中没有一个名为Main的对象,您将一个空字符串分配给type变量:< / p>

<s:set var="type" value="Main" />

当你在第二个例子中(几乎)做得很好的时候:

<s:set var="AList" value="{'Main'}" />

只需使用

<s:set var="AList" value="%{'Main'}" />

<s:set var="AList" value="'Main'" />
无处不在,它会起作用。

{}单独是无用且危险的,因为它在OGNL(列表投影,列表选择等)中具有特殊含义。