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