[英]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>
我的动作有一个名为storageIds
的Map<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.