想请教这样一个问题,虽然在网上找到一种方法,但感觉这种会造成struts-config.xml里的代码繁冗,看大家有没有其它的办法:问题:
   现有两个页面(用户注册页面、用户资料修改页面)指向同一Action(继承自DispatchAction)和ActionForm(验证信息基本相同),当ActionForm验证失败时,分别需要返回到注册页面和修改页面,但struts-config.xml中的input只能设置一个值,这时怎么办?网上找到的答案是,再复制一个action,只是把其中的path与input改掉:<action
   path="/regEmployee"
   input="/registerEmployee.jsp"
   
   parameter="method"
   name="employeeForm"
   attribute="employeeForm"
   scope="request"
   validate="true"
   type="com.xyh.emp.EmployeeDispatchAction">   
   <forward name="detail" path="/detailEmployeeInfo.jsp" />
</action><action
   path="/editEmployee"
   input="/editEmployee.jsp"
   
   parameter="method"
   name="employeeForm"
   attribute="employeeForm"
   scope="request"
   validate="true"
   type="com.xyh.emp.EmployeeDispatchAction">   
   <forward name="detail" path="/detailEmployeeInfo.jsp" />
</action>
   因为我一个模块建立一个Action(DispathAction),如果多个需要验证的页面都指向这个action,难道在struts-config.xml里要建立多个相似的action。求更好的解决办法中……

解决方案 »

  1.   

    <action
       path="/regEmployee"
       parameter="method"
       name="employeeForm"
       attribute="employeeForm"
       scope="request"
       validate="true"
       type="com.xyh.emp.EmployeeDispatchAction">   
       <forward name="detail" path="/detailEmployeeInfo.jsp" />
    </action>
    使用同一个action可以吧不设置input
      

  2.   

    当ActionForm验证失败时,分别需要返回到注册页面和修改页面?
    验证失效不就是返回登录页面吗?
      

  3.   

    是DispathAction
    不是根据方法名跳吗?
    action.do?method=youraction
    在一个action配置 <forward 也可以有多个的
      

  4.   

    1、struts-config.xml:<action path="/dispatch" parameter="method" type="com.rgh.app.struts.TestDispatchAction">
        <forward name="success" path="/result.jsp"></forward>
    </action>(注意 parameter="method" 这个键值)2、Action 类:package com.rgh.app.struts;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.actions.DispatchAction;public class TestDispatchAction extends DispatchAction {    // 方法 1
        public ActionForward methodName1(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) {        log.info("执行 TestDispatchAction.methodName1()");        return mapping.findForward("success");
        }    // 方法 2
        public ActionForward methodName2(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) {        log.info("执行 TestDispatchAction.methodName2()");        return mapping.findForward("success");
        }
    }
    3、页面:<!-- 注意后面参数 method=methodName1 将会被 methodName1(args) 方法处理 -->
    <a href="dispatch.do?method=methodName1">Dispatch Action methodName1</a>
    <br>
    <!-- 注意后面参数 method=methodName2 将会被 methodName2(args) 方法处理 -->
    <a href="dispatch.do?method=methodName2">Dispatch Action methodName2</a>
      

  5.   

    修改:
    struts-config.xml<action path="/dispatch" parameter="method" type="com.rgh.app.struts.TestDispatchAction">
        <forward name="regSuccess" path="/regSuccess.jsp"></forward>
        <forward name="modifySuccess" path="/modifySuccess.jsp"></forward>
    </action>
      

  6.   

    <action path="/*Person" type="cn.itcast.PersonAction" scope="request" input="/{1}.jsp" parameter="method">
    <forward name="list" path="/WEB-INF/pages/list.jsp"/>
    </action>
    楼主可以考虑这样试下,
    eg(editPerson.do?method=edit)访问PersonAction的edit方法,
    此时input="edit.jsp";把editPerson变成addPerson的话,input="add.jsp";
      

  7.   

    这个确实有点难度,一个path只能对应一个action。
    而且input很难办......
    将<forward name="detail" path="/detailEmployeeInfo.jsp" />写成全局的会简洁一点。
      

  8.   

    这个就要看你的设计了,个人感觉DispatchAction上最好别放验证
    ,必竟一个分发的action放上验证也不太合适啊,把验证放在分发之后的
    业务action上去,你的问题应该就不存在了。
    还有个人感觉不要把业务的东西放在DispatchAction的扩展类里。
      

  9.   

    这个在struts2里应该很简单吧
    你说的是struts1.x吧
    因为我不知道struts1.x
    struts2里面是可以通配符实现一个input可以对应多个值
    <result name="input">{0}.jsp</input>
    可以给0赋值不同的值来达到目的
      

  10.   

    大家可能还没有搞清楚上面说的,两个页面分别提交后,都是直接到form里面去验证,验证不成功的话,就直接跳回各自的页面,还没有到action中关于上面的,我说明一下:
    1楼、3楼:因为还没到action中,正是我上面说的问题;
    2楼:“验证失效不就是返回登录页面吗” --> 我是想分别返回注册页面与修改页面
    4、5楼:还是与1楼等人的问题一样
    7楼:请说明白点……
      

  11.   

    如果 ActionForm 的 validate() 方法验证出错误,会自动转发到配置文件 action 的 input 属性。这算是框架限制吧。所以你说的功能在 struts1 中是无法实现的。
    何况一般不提倡在 ActionForm 中验证吧。
      

  12.   

    你直接用JSP的那个<form action="在这里写你要提交到的那个ACTION就好了吧,然后在那ACTION里面处理就好了">