无法在Struts2中设置映射属性

时间:2014-09-01 06:09:59

标签: java struts2 struts

我有一个迭代器,需要使用映射属性或索引属性,但我的getter-setter没有获得这些值。

对于Ex: (这只是一个例子。最终的想法是我是否可以在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();
    }
}

之前我在struts 1中有这种工作函数,但现在我正在尝试将其移动到struts 2.现在我在HelloWorldAction.java中为arp和prp设置的setter函数在表单提交时没有被调用。

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

注意:我在问题描述中做了一些修改

提前致谢。

1 个答案:

答案 0 :(得分:0)

您违反很多&#34;规则&#34;这里,除了避免框架提供的几乎任何机制。永远不要把逻辑放在访问器/ mutator(getter / setter)中,永远不要使用大写的变量名,避免使用以大写字母开头的变量,阅读struts Type Conversion,使用Struts标签(例如。<s:textfield/>而不是{{ 1}})尽可能将代码缩减为:

<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>