【问题标题】:Using <s:set /> to dynamically build element's name使用 <s:set /> 动态构建元素名称
【发布时间】:2015-06-04 14:24:53
【问题描述】:

我想重用一组 HTML 字段元素,并让 struts 从变量中构建“名称”属性。我看到了这个How To Generate unique HTML id attributes within Struts 2 iterator tag,并认为我可以使用类似的东西,但不能让它工作。看来我只能在迭代器循环中从 struts 变量构建名称属性。我怎样才能用一个简单的变量来做到这一点?

这是我的代码,第一次尝试使用变量,第二次尝试使用迭代器:

<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="">

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

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

【问题讨论】:

    标签: jsp struts2 iterator ognl struts-tags


    【解决方案1】:

    您将 value 分配给第一个变量,而不是字符串文字, 并且由于您的 ValueStack 中没有名为 Main对象,因此您将 空字符串 分配给 type 变量:

    <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中有特殊的含义(列表投影、列表选择等)

    【讨论】:

    • 谢谢!我在字符串文字周围添加了引号以使其工作:
    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多