2010-03-25 97 views
0

通過我的內容,Action的本質是可以將屬性推送到請求參數值。和,一個精彩特徵是Struts2的允許直接填充針對類類型屬性的參數值;)接口類型的動作屬性

假設有如下存在操作和屬性的類,類 行動延伸ActionSupport的{ 用戶用戶;

@Action(value="hello" {@result=(.......)}) 
    public void execute() { 
     ........ 
    } 
    ..... 
    public void setUser(User user) { 
    this.user = user; 
    } 
    public User getUser() { 
    return this.user; 
    } 
} 

class User { 
    String name; 
    ..... 
    public void setName(String name) { 
    this.name = name; 
    } 
    public String getName() { 
    return this.name; 
    } 
} 

你可以通過這樣做來填充User類屬性。

http://...../hello.action?user.name=John or via jsp page 

然後,我意識到實際上有人將Action屬性作爲接口類型。我的問題是背後的原因。如果有示例代碼證明它會很好。

在此先感謝!

回答

1

對不起,但你的問題沒有多大意義。 澄清:

  • 「屬性」:在Java中的一類的 「屬性」 的東西,通過吸氣/ setter方法方法是入店(的setXXX()/的getXXX()=>屬性XXX),tipically(但不一定)對應於私人領域。

  • 在Struts2中,您有一個Action對象,並且通常(不一定,並非總是)從請求(通過「Parameters」攔截器)填充(set)屬性,然後在從JSP讀取的視圖階段(或其他)頁面。 因此,在您的示例中,對於請求http://...../hello.action?user.name=John,Struts2會嘗試在您的操作(實際上在您的值棧中)中找到屬性爲「user」的屬性「user」,並嘗試設置它(如果這些類型是可兌換的)。也就是說,他會嘗試調用諸如yourAction.getUser()。setName(「John」)。 Struts2不知道 - 不關心 - 屬性「用戶」或「名稱」是什麼類型,即使它們是真實域也不知道。 (儘管它們應該有一個默認的構造函數,但它們的行爲應該像「bean」一樣)。

  • 爲什麼和什麼時候應該編寫接口而不是具體的類,這在任何Java書中都有解釋,這只是一個標準的良好實踐,並且有大量關於它的頁面。它與Struts2無關。在這種情況下,對於一個Action,一個人最終只對某些「服務」字段感興趣,而這些字段通常是長壽命的(也許是單身人士),而不是由動作本身(或請求!)實例化。因此,這些接口不是我們在這裏考慮的屬性,它們(通常)不公開地公開顯示,並且通常不會被填充,也不會從客戶端讀取。