JSP中Struts2映射条目的字段名称

时间:2009-04-12 10:33:39

标签: jsp map struts2 collections type-conversion

我想从JSP填充Struts2操作的map属性。我应该使用的数据名称格式是什么?最初我有兴趣填充Map< String,String>但是在将来我会很有趣地填充Map< String,DomainClass> DomainClass具有自己的属性。

3 个答案:

答案 0 :(得分:3)

我有一个动作,其属性如下 -

private Map<String,String> assetProps;
...
public Map<String, String> getAssetProps() {
    return assetProps;
}

public void setAssetProps(Map<String, String> assetProps) {
    this.assetProps = assetProps;
}

要将值设置到地图上,基本上有两个步骤。首先,OGNL无法实例化地图,因此由您自己决定。在我的操作中,我实现了Preparable接口,但在运行'public String input()'方法之前实例化它,如下所示 -

public class EditAction extends ActionSupport implements Preparable {
...
    public void prepare() {
        // just satisfying Preparable interface so we can have prepareInput()

    }

    public void prepareInput() throws Exception {
        assetProps = new HashMap<String,String>();
    }

现在,该对象是非null的,我可以在JSP中使用类似于以下的语法 -

  <s:iterator value="asset.properties" var="prop">
    <sjx:textfield name="%{'assetProps[\\'' +#prop.propName +'\\']'}" 
           value="%{#prop.propValue}" 
           label="%{#prop.propName}" size="25"/>
  </s:iterator>

迭代器将一组对象从堆栈中拉出并迭代它。重要的部分是“name =”部分,请注意双重转义的单引号。这样,当页面呈现时,输入元素的名称变为(例如) - assetProps ['Screen Size']。提交页面时,在“public void execute()”方法中,assetProps已完全填充。

答案 1 :(得分:2)

这是另一个做类似事情的代码片段,以防有人帮忙。

<s:iterator value="storageIds" var="sids">
    <s:hidden name="%{'storageIds[\\'' + key +'\\']'}" value="%{#sids.value}"/>
</s:iterator>

我的操作有一个名为Map<String,String>

storageIds

迭代Map时,键和值会解析为Map.Entry属性。

答案 2 :(得分:0)

试试这个。为我完美工作

<s:iterator value="configMap" id="daa">
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" />
</s:iterator>