无法在Struts2中设置映射属性

问题描述:

我有一个需要使用映射属性或索引属性的迭代器,但我的getter-setter没有获取这些值。无法在Struts2中设置映射属性

对于防爆:(。这仅仅是一个例子最终的想法是我是否可以使用在Struts 2或没有对应的属性如果是的话,那么如何。)

的index.jsp:

<s:form action="hello" namespace="foo">  
    <s:textfield name="arp(0)" /> <br/> 
    <s:textfield name="prp(0)" /> <br/> 
    <s:textfield name="arp(1)" /> <br/> 
    <s:textfield name="prp(1)" /> <br/> 
    <s:submit value="Say Hello" /> 
</s:form> 

helloWorld.action:

class PRLists { 
    String arp; 
    String prp; 

    public String getArp() { 
     return Arp; 
    } 

    public void setArp(String aRP) { 
     arp = aRP; 
    } 

    public String getPrp() { 
     return prp; 
    } 

    public void setPrp(String pRP) { 
     prp = pRP; 
    } 

} 

public class HelloWorldAction { 
    ArrayList<PRLists> prlist = new ArrayList<PRLists>(); 

    public String execute() throws Exception { 
     System.out.println("ruuning execute"); 
     return "success"; 
    } 

    public ArrayList<PRLists> getPrlist() { 
     return prlist; 
    } 

    public void setPrlist(ArrayList<PRLists> prlist) { 
     this.prlist = prlist; 
    } 

    public String getArp(String key) { 
     int index = Integer.parseInt(key); 
     return prlist[index].arp; 
    } 

    public void setArp(String key, Object value) { 
     System.out.println("set ARP: index:" + index + ", value" + value); 
     int index = Integer.parseInt(key); 
     prlist[index].arp = value.toString(); 
    } 

    public String getPrp(String key) { 
     int index = Integer.parseInt(key); 
     return prlist[index].prp; 
    } 

    public void setPrp(String key, Object value) { 
     System.out.println("set PRP, Key:" + key + ", value:" + value); 
     int index = Integer.parseInt(key); 
     prlist[index].prp = value.toString(); 
    } 
} 

早些时候,我是有这种在支杆工作职能,但现在我想将它移动到支柱2.现在我的setter函数我对于arp和prp,HelloWorldAction.java在表单提交时不会被调用。

public void setArp(String key, Object value); 
public void setPrp(String key, Object value); 

<s:textfield name="prlist[0].arp" />可以工作,但我们有需要使用的字段与名称,如<s:textfield name="arp(0)" />一些相关的代码。 我不知道struts 2是否支持映射的属性。如果支持,那我该如何使用它。

我还发现了一个相关的问题:https://issues.liferay.com/browse/LPS-14128

注:我已经提前

感谢作出有关说明一些修改。

您违反了很多这里的“规则”,除了避免框架提供的几乎任何机制。请勿将逻辑放入访问器/增变器(获取器/设置器)中,切勿使用大写变量名称,避免使用以大写字母开头的变量,读取struts Type Conversion,尽可能使用Struts标记(例如,<s:textfield/>而不是<input type="text" />),并将代码:

public class HelloWorldAction{ 
    private String name; 
    private List<PRLists> arnList = new ArrayList<PRLists>(); 

    public String execute() throws Exception { 
     System.out.println("running execute"); 
     return "success"; 
    } 

    public List<PRLists> getArnList(){ 
     return arnList; 
    } 
    public void setArnList(List<PRLists> arnList){ 
     this.arnList = arnList; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     System.out.println("set name: "+name); 
     this.name = name; 
    } 
} 
<s:form action="hello" namespace="foo">  
    <s:textfield name="name" label="name" /> 
    <s:textfield name="arnList[0].arp" /> <br/> 
    <s:textfield name="arnList[0].prp" /> <br/> 
    <s:textfield name="arnList[1].arp" /> <br/> 
    <s:textfield name="arnList[1].prp" /> <br/> 
    <s:submit value="Say Hello" /> 
</s:form> 
的迭代器

,就像你说的(不显示它),喜欢

<s:form action="hello" namespace="foo"> 
    <s:textfield name="name" label="name" /> 
    <s:iterator value="arnList" status="rowStatus"> 
     <s:textfield name="arnList[%{#rowStatus.index}].arp" /> <br/> 
     <s:textfield name="arnList[%{#rowStatus.index}].prp" /> <br/> 
    </s:iterator> 
    <s:submit value="Say Hello" /> 
</s:form> 
+0

我不想使用。我可以按照我使用的方式使用映射的属性。 。这是为struts1工作的。我修改了这个问题来纠正一些错误,请回复。 – 2014-09-01 10:02:30

+0

可以工作,但是我们有一些依赖代码需要使用名称如的字段。这被称为映射属性,我不知道这是否适用于struts2。 – 2014-09-01 10:25:20

+0

你在说[关于此](http://struts.apache.org/release/2.3.x/docs/type-conversion.html#TypeConversion-Indexingacollection byapropertyofthatcollection)?如果是的话,请阅读[这个答案](http://stackoverflow.com/a/24191304/1654265)。但请考虑将*依赖代码*升级到标准,简单和符合Struts2的标准。 Struts1是另一双鞋......不重写几个标签的好处很容易被一堆复杂的黑客破坏所超越。 – 2014-09-01 12:02:06