想请教这样一个问题,虽然在网上找到一种方法,但感觉这种会造成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。求更好的解决办法中……
现有两个页面(用户注册页面、用户资料修改页面)指向同一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。求更好的解决办法中……
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
验证失效不就是返回登录页面吗?
不是根据方法名跳吗?
action.do?method=youraction
在一个action配置 <forward 也可以有多个的
<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>
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>
<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";
而且input很难办......
将<forward name="detail" path="/detailEmployeeInfo.jsp" />写成全局的会简洁一点。
,必竟一个分发的action放上验证也不太合适啊,把验证放在分发之后的
业务action上去,你的问题应该就不存在了。
还有个人感觉不要把业务的东西放在DispatchAction的扩展类里。
你说的是struts1.x吧
因为我不知道struts1.x
struts2里面是可以通配符实现一个input可以对应多个值
<result name="input">{0}.jsp</input>
可以给0赋值不同的值来达到目的
1楼、3楼:因为还没到action中,正是我上面说的问题;
2楼:“验证失效不就是返回登录页面吗” --> 我是想分别返回注册页面与修改页面
4、5楼:还是与1楼等人的问题一样
7楼:请说明白点……
何况一般不提倡在 ActionForm 中验证吧。