繁体   English   中英

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

[英]Field Names for Struts2 map entries in a JSP

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

我有一个动作,具有以下属性-

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已完全填充。

如果有帮助,这是另一个类似的代码片段。

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

我的动作有一个名为storageIdsMap<String,String>

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

尝试这个 。 为我完美地工作

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM