访问Struts2中的Map键值

时间:2011-11-21 12:23:57

标签: java forms struts2

我在数据库中有一个变量映射,我想在网页上显示详细信息,前端是struts2。 我试过这个

 <html:iterator value="fields" id="field">
    <html:textfield name="#field.value" key="#field.value" label="#field.key"/> 
</html:iterator>

显然这不起作用,我怎样才能轻松获得Key Name所以我可以拥有这样的代码

想法是显示如下

Name: [  ]
Random: [  ]
Something: [   ] 

作为表单中的文本字段...

我怎么能这么做?

3 个答案:

答案 0 :(得分:5)

我不确定如何在<html:iterator>中执行此操作,因为从未在struts2标记中看到过它没有遇到它。

将使用简单的<iteraor>代码

假设我们有listmap作为地图

<s:iterator value="listmap" status="stat">
                    <s:iterator>
                        <tr>
                            <th><s:property value="#stat.index"/></th>
                            <td><s:property value="key"/></td>
                            <td><s:property value="value"/></td>
                        </tr>
                    </s:iterator>
                </s:iterator>

内部迭代器是上下文敏感的,它将使用压入堆栈的最后一个值。 status属性在每次迭代时为我们提供一个IteratorStatus对象,如果我们想知道当前的迭代,这对我们很有用。

答案 1 :(得分:2)

如果您有任意命名的值要发送回动作,则应使用基于地图的表单标记。请参阅collections文档。

<s:form ...>
  <s:iterator value="fields" var="field">
    <s:textfield name="sortingKey['%{#field.key}']" label="%{key}" value="%{value}" />
  </s:iterator>
</s:form>

为动作中的地图提供一个getter / setter。

此外,如果您使用Struts 2.1+,则不推荐使用id的{​​{1}}属性;应使用<s:iterator>属性命名循环变量。

答案 2 :(得分:1)

前缀“html”是struts2的taglib?

如果你使用structs2的taglib,让我们使用前缀s:

你可以这样做

迭代map的键,然后按键访问该值。

<s:iterator value="#someMap.keys" var="key">
   <s:textfield value="#someMap[key]" name="someMap[#key]"/>
</s:iterator>