2016-08-17 54 views
-2

我正面臨着一個我無法理解的問題(我的struts2知識並未被使用)。Struts2在setter中傳遞兩次

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

我第一次拿到了吸氣(木屐)與空字符串=> OK 我後我的形式,然後再顯示在同一個JSP。 在這裏我的問題:

  1. 我得到了setter太過張貼形式。 A =「」=>確定
  2. 我的算法運行並設置爲字符串A. A = foo =>確定
  3. 現在我想展示相同的JSP,但在JSP的getter之前又收到另一個setter調用。而這第二個二傳手電話轉來 「」=> KO

我的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中,我的輸入總是空的。 執行後有沒有任何方法或類似的東西?

+0

您發送沒什麼後端所以其捐贈' 「」'字符串... ''那麼它會顯示A值爲 –

+0

它並不能解決我的問題。如果我使用'value =「檢查」'A總是等於「檢查」。它不使用'execute()'修改的值。我從來沒有使用'value','name' struts知道它需要使用'getA()'來填充'value'。 – Tyrael

+0

你怎麼知道它是否被稱爲相同的動作?在填充值之前,可以執行許多代碼,包括getter和setter。所有這些代碼都是隱藏的問題,問題不清楚。你沒有提供任何線索如何調用。所以把這個問題作爲題外話來投票。用模糊的文字回答這個問題是不可能的。 –

回答

0

您應該將JSP改變

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

讓你隱藏充滿GET充滿了來自服務器的新的價值。

注意

這將是更謹慎地使用變量小寫字母

根據約定 - 變量以小寫字母開頭。

事實上,你沒有遵循這個規則可能會或可能不會造成與getter和setter的混淆,並且可能會或可能不會制動你的代碼。

所以更好的(並且爲了上一些安全方面)

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}"/>

+0

我嘗試了。但沒有改變。大寫字母就是這個例子。但是,我最大限度地使用慣例。 – Tyrael

+0

@Tyrael然後你應該使用調試,設置斷點等來理解爲什麼你的setter被調用兩次。我認爲我們沒有足夠的信息來幫助你。正如你可能理解的那樣,調用者被調用兩次不是一個正常的行爲 - 所以你的代碼正在發生一些事情...... – Plirkee