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