struts的parameter功能

struts的parameter功能(转自 [url]http://hi.baidu.com/chuntian1919/blog/item/7c12898061a753d39023d974.html[/url])
2008-01-28 10:29 P.M.
没有struts之前,使用servlet,最常用的是doGe t,doPost,service方法,如果有些经验的程序员会合 理的使用这三个方法:如在用户发出get的请求时 ,将用户请求在doGet方法中处理,用户发出post请求时 ,将用户的请求用doPost请求处理,必要时加上service 方法去处理那些在一个servlet中必须执行的请求 ,用户的请求大体也就这三类,但是如果细分,一个“编辑”, “删除”,“查看”等操作都是doGet的范围,当然也可以都写到 serice方法中或doPost中处理,这样为了区分这些请求 ,我们通常都要在程序中加入一个判断的参数,如:operate ,然后在程序中判断 if operate.equals("update")....,if operate.equals("del")....,if operate.equals("view")....等,实际上这只是个简单的逻辑 ,如果业务更加复杂,你可能写更多的类时operate的参数 ,这样就造成程序中有若干if..else if...else if ..,即便你有非常好的编码规范,整齐的缩进,这个程序也相当难维 护;而用到struts时,你又可能把这些参数都写到execut e方法中;那么最好的方法还是将这些逻辑分开处理,如果执行 “编辑”操作的时候调用“编辑”对应的方法,执行“删除 ”的时候调用“删除”对应的方法...将是比较理想的结果 ,为了实现这个应用要求,struts引入DispatchAct ion,这样你在struts-config.xml文件的action元 素中增加parameter属性即可实现这个功能:
例如appfuse的配置:
<action
         path="/saveUser"
         type="org.appfuse.webapp.action .UserAction"
         name="userForm"
         scope="request"
         input="edit"
         parameter="method"
         unknown="false"
         validate="false"
       >
         <forward
           name="list"
           path="/WEB-INF/pages/userList .jsp"
           redirect="false"
         />
         <forward
           name="edit"
           path="/WEB-INF/pages/userForm .jsp"
           redirect="false"
         />
       </action>

parameter="method"这个参数就是说 ,在用户提交请求时取得method参数,根据method参数调 用相应的方法,如/editUser.html?method =Delete就是调用对应action中的Delete方法 ,这样你就可以写一个Action类处理很多的逻辑 ,而不是象从前那样在一个方法里面加上若干参数,或者直接建若干个 action来处理。

例如appfuse的UserAction
package org.appfuse.webapp.action;
import ...

public final class UserAction extends BaseAction {
    
       public ActionForward add(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
       throws Exception {
           ...
       }
       public ActionForward cancel(ActionMapping mapping, ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
       throws Exception {
           ...
       }
       public ActionForward delete(ActionMapping mapping, ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
       throws Exception {
           ...
       }
       public ActionForward edit(ActionMapping mapping, ActionForm form,
                                  HttpServletRequest request,
                                  HttpServletResponse response)
       throws Exception {
           ...
       }
       public ActionForward save(ActionMapping mapping, ActionForm form,
                                  HttpServletRequest request,
                                  HttpServletResponse response)
       throws Exception {
           ...
       }
       public ActionForward search(ActionMapping mapping, ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
       throws Exception {
           ...
       }
    
       public ActionForward unspecified(ActionMapping mapping, ActionForm form,
                                         HttpServletRequest request,
                                         HttpServletResponse response)
       throws Exception {
        
           ...
       }
       private void sendNewUserEmail(HttpServletReq uest request, UserForm userForm)
       throws Exception {
           ...
       }
}

当你没有传入method参数,或者没有符合参数的方法时 ,程序将执行unspecified方法;当然method只是一 个逻辑名字而已,你也可以使用其他名字,如:method1 ,method2,go2,asdad等

你可能感兴趣的:(struts,parameter,职场,action,休闲)