Turbine 有一个非常好的功能来帮助开发人员处理web耶面的提交数据为了理解这一功能你需要知道Turbine是如何处理一次提交的 事实上当在一个URI中只要发现有action这个变量出现在执行所有Screen类之前会执行一个程序我们来看下面这个例子(来自VelocitySite的Howto示例): 对于URLrTurbine 会首先执行一个名叫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 contextput (username username ); datasetMessage(User Added!); } public void doPerform(RunData data Context context) throws Exception { datasetMessage(Button not found!); } } 然后在HTML中这样写: <input type=submit name=eventSubmit_doAdd value=Add User> 当Action执行的时候将会收到一个事件来执行Action类中的doAdd()方法这样处理最酷的就是你的每一种action(操作注:比如点击一个提交按钮等)都可以对应到Action类中一个特定的方法 这个新的功能并不意味着你应该把所有的操作都写到一个类里而是假设有一个页面里面有一些和这个页面关西很紧密的操作这时最好是把这些操作都写到同一个类里这样可以帮助你方便的判断并处理具体哪个按钮给点击了而不是用一些ifelse来 如果判断不出哪个按钮被点击了(找不到一个合适的方法执行)将会执行doPerform()方法 因为ParameterParser把所有的key都变成了小写我们必须将提交的数据里得到一个合适的方法名比如:一个按钮名叫 eventSubmit_doDelete提交的时候就变成了eventsubmit_dodelete因此我们需要通过一些命名规范来得到真正的方法名转换的规则是: * 变量名(如:提交按钮)必需以eventSubmit_开头 * 变量名在这个前缀后必需是do * 在do之后的第一个字母必须是大写并且其他都是小写 只要你遵循这些命名规范在Action类中就能找到相应的方法来执行 (注:以上规则适合turbine及以前的版本在turbine及以后的版本中 eventSubmit_doMySaveMethod也是一个合法的名子因为在以后的版本里Parameterparser不会把key 都变成小写这一点在取得提交数据的时候也要注意的) 在TurbineResourcesproperties里有一个属性名叫actioneventsubmitneedsvalue 如果把这个属性设置成true那只有值不为空并且不为的事件才会被执行这在一个FORM有多个不同的事件(或者说提交按钮)并且由客户端的代码(比如javascript)提交的时候比较有用 |