Struts2在setter中传递两次

时间:2016-08-17 15:26:01

标签: java jsp struts2 setter

我正面临着一个我无法理解的问题(我的struts2知识不能实现)。

我在JSP中输入了一个表单:

<stags:form method="POST" action="foo" validate="false" theme="simple" id="form" name="form" enctype="multipart/form-data">
    <stags:hidden name="A" />
</stags:form>

我第一次使用空字符串获取getter(getA)=&gt;好 我发布我的表单,然后再次显示相同的JSP。 我的问题在这里:

  1. 我得到了setter,因为太过帖子了。 A =“”=&gt;行
  2. 我的alogorithm运行并设置le String A. A = foo =&gt;行
  3. 现在我想显示相同的JSP但是我在JSP的getter之前得到了另一个setter调用。而第二个二传手将A调到“”=&gt; KO
  4. 我的java(简化代码,我知道):

    private String A = "";
    public String execute() {
        System.out.println("before : " + A);
        A = "foo"; //(using "=" or "setA" same result)
        System.out.println("after : " + A);
        return SUCCESS;
    }
    public String getA() {
        System.out.println("getter : -" + A + "-");
        return A;
    }
    public void setA(String b) {
        System.out.println("setter : -" + b + "-");
        this.A = b;
    }
    

    struts.xml中

    <action name="Bar" class="package.Bar">
        <result>bar.jsp</result>
    </action>
    

    当我发帖时,我得到了:

    setter : --
    before : 
    after : foo
    setter : --
    getter : --
    

    所以在我的JSP中,我的输入总是空的。 是否有任何方法在执行后调用或类似的东西?

1 个答案:

答案 0 :(得分:0)

你应该将你的jsp改为

<stags:hidden name="A" value="%{A}" />

这样你的隐藏填充就会从服务器中获得新值。

请注意

对变量使用小写字母会更为谨慎。

根据惯例 - 变量以小写开头。

您不遵守此规则的事实可能会或可能不会与吸气剂和制定者产生混淆,并且可能/或可能不会制造您的代码。

那么好(为了安全起见)

private String a = "";
public String execute() {
    System.out.println("before : " + a);
    a = "foo"; //(using "=" or "setA" same result)
    System.out.println("after : " + a);
    return SUCCESS;
}
public String getA() {
    System.out.println("getter : -" + a + "-");
    return a;
}
public void setA(String b) {
    System.out.println("setter : -" + b + "-");
    this.a = b;
}

<stags:hidden name="a" value="%{a}"/>