天天看點

form與action之setter與getter

對于表單送出資料給action時候,可以簡單的用setter與getter函數實作值的傳遞。

例如在jsp裡有這麼個form:

<s:form action="login">

<s:textfield name="name" key="user"/>

<s:textfield name="pass" key="pass"/>

<s:submit key="logins" value="submit"/>

</s:form>

那麼在action裡面隻要有相應的setName(String name) setPass(String pass) 方法則送出的時候就可以自動調用setter方法。這個是基于struts2的反射機制。這個操作是由params攔截器完成的,params對應的類是com.opensymphony.xwork2.interceptor.ParametersInterceptor。由于params已經在defaultStack中定義,是以,在未引用攔截器的<action>中是會自動引用params的,如下面的配置代碼,在通路first動作時,Struts2是會自動執行相應的setter方法的。

 首先,當表格送出後,會檢查處理類中是否由相應的setter,如textfield的name為“name”那麼對應的setter就應該為“setName",(命名規範下面再細說)。如果有則調用。而對于多個送出資料量來說如果設定相應的setter那麼會使得action過于臃腫。可以通過類來實作。

通過定義一個user類,包含name,pass屬性,然後再用setUser(user users)方法來傳入user類。action中隻要包含一個user類就行了。

對應的jsp的form則改為對user屬性的指派。

<s:form action="login">

<s:textfield name="user.name" key="user"/>

<s:textfield name="user.pass" key="pass"/>

<s:submit key="logins" value="submit"/>

</s:form>

還有可以使用modelDriven機制。

setter與getter函數的命名規則:

jsp裡name的首字母小寫,對應的setter則需要将首字母變為大寫,然後在前面加set就是了。如:jsp中name為“login”那麼setter為“setLogin”。如果首字母大寫,次子母也大寫,那麼setter隻要再name前面加set。如:jsp為:“LOgin"那setter為:”setLOgin"

如果首字母大寫,次子母小寫,這樣是不允許的。至于為什麼,隻能說不知道,那個反射就這麼設定了``學藝不精啦。

還有必須要注意的是setter方法必須為public。否則也無法找到相應函數的。

繼續閱讀