0

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

4

3 回答 3

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 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>();
    }

现在,对象是非空的,我可以在 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 已完全填充。

于 2009-06-24T15:28:50.300 回答
2

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

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

我的动作有一个Map<String,String>名字storageIds

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

于 2011-05-04T13:14:08.907 回答
0

试试这个 。为我完美工作

<s:iterator value="configMap" id="daa">
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" />
</s:iterator>
于 2013-11-15T11:13:27.220 回答