2014-09-01 61 views
0

我有一個需要使用映射屬性或索引屬性的迭代器,但我的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

注:我已經提前

感謝作出有關說明一些修改。

回答

0

您違反了很多這裏的「規則」,除了避免框架提供的幾乎任何機制。請勿將邏輯放入訪問器/增變器(獲取器/設置器)中,切勿使用大寫變量名稱,避免使用以大寫字母開頭的變量,讀取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