Turbine 有一個非常好的功能來幫助開發人員處理web耶面的提交數據
為了理解這一功能
你需要知道Turbine是如何處理一次提交的
事實上
當在一個URI中只要發現有action這個變量出現
在執行所有Screen類之前會執行一個程序
我們來看下面這個例子(來自VelocitySite的Howto示例):
對於URL
r
Turbine 會首先執行一個名叫
NewUse
的Action類
在這種情況下
所有繼承ActionEvent而不是Action的類都可以象如下的代碼一樣方便的處理:
public class NewUser extends VelocityAction
{
public void doAdd (RunData data
Context context) throws Exception
{
// put code here to add the user to the system
context
put (
username
username );
data
setMessage(
User Added!
);
}
public void doPerform(RunData data
Context context) throws Exception
{
data
setMessage(
Button not found!
);
}
}
然後
在HTML中這樣寫:
<input type=
submit
name=
eventSubmit_doAdd
value=
Add User
>
當Action執行的時候
將會收到一個
事件
來執行Action類中的
doAdd()
方法
這樣處理最
酷
的就是你的每一種
action(操作
注:比如點擊一個提交按鈕等)
都可以對應到Action類中一個特定的方法
這個新的功能並不意味著你應該把所有的操作都寫到一個類裡
而是假設有一個頁面裡面有一些和這個頁面關西很緊密的操作
這時最好是把這些操作都寫到同一個類裡
這樣可以幫助你方便的判斷並處理具體哪個按鈕給點擊了
而不是用一些
if
else
來
如果判斷不出哪個按鈕被點擊了(找不到一個合適的方法執行)
將會執行doPerform()方法
因為ParameterParser把所有的
key
都變成了小寫
我們必須將提交的數據裡得到一個合適的方法名
比如:一個按鈕名叫 eventSubmit_doDelete
提交的時候就變成了eventsubmit_dodelete
因此
我們需要通過一些命名規范來得到真正的方法名
轉換的規則是:
* 變量名(如:提交按鈕)必需以
eventSubmit_
開頭
* 變量名在這個前綴後必需是
do
* 在
do
之後的第一個字母必須是大寫並且其他都是小寫
只要你遵循這些命名規范
在Action類中就能找到相應的方法來執行
(注:以上規則適合turbine
及以前的版本
在turbine
及以後的版本中 eventSubmit_doMySaveMethod也是一個合法的名子
因為在
以後的版本裡
Parameterparser不會把
key
都變成小寫
這一點在取得提交數據的時候也要注意的)
在TurbineResources
properties裡有一個屬性
名叫
action
eventsubmit
needsvalue
如果把這個屬性設置成
true
那只有值不為空
並且不為
的事件才會被執行
這在一個FORM有多個不同的事件(或者說提交按鈕)
並且由客戶端的代碼(比如javascript)提交的時候比較有用
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19337.html