Jsp 使用<;s:set/>;动态构建元素';姓名

Jsp 使用<;s:set/>;动态构建元素';姓名,jsp,struts2,iterator,ognl,struts-tags,Jsp,Struts2,Iterator,Ognl,Struts Tags,我想重用一组HTML字段元素,并让struts从一个变量构建“name”属性。我看到了这一点,并认为我可以使用类似的东西,但无法让它工作。似乎我只能在迭代器循环中从struts变量构建name属性。我如何用一个简单的变量来代替呢 下面是我的代码,第一个尝试使用变量,第二个尝试使用迭代器: <s:set var="type" value="Main" /> <s:textfield name="prefix%{#type}.Name"/> <s:set var="A

我想重用一组HTML字段元素,并让struts从一个变量构建“name”属性。我看到了这一点,并认为我可以使用类似的东西,但无法让它工作。似乎我只能在迭代器循环中从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>

这将生成两个元素:

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

第一个不替换变量,迭代器循环工作


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

您正在为第一个变量指定一个值,而不是字符串文本, 由于在您的ValueStack中没有名为
Main
对象,因此将空字符串分配给
类型
变量:


在第二个示例中,当您做得(几乎)很好时:


只用



在任何地方,它都会起作用


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

谢谢!我在字符串文字周围添加了引号以使其正常工作: