2009-04-12 65 views
0

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

回答

3

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

private Map<String,String> assetProps; 
... 
public Map<String, String> getAssetProps() { 
    return assetProps; 
} 

public void setAssetProps(Map<String, String> assetProps) { 
    this.assetProps = assetProps; 
} 

要设置值到地图上,基本上有两个步骤。首先,OGNL不能实例化地图,因此取决于您。在我的动作,我实现了制备的接口,但如下运行前对其进行实例化“公共字符串输入()”方法 -

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

+0

感谢您的解释,这帮助我解决了类似的情况。一方面,您实际上并不需要Preparable接口,您可以在声明它时初始化Map。 – shakerlxxv 2012-11-01 02:42:28

2

这是另一个代码片段,它可以做类似的事情,以防万一。

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

我的操作有一个名为Map<String,String>storageIds

当遍历一个地图,键和值解析为Map.Entry属性。

0

试试这个。为我完美工作

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