第一种
例如:类LoginAction继承DispachAction,:
public class LoginAction extends DispatchAction {
public ActionForward loginValidate(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
ActionForward forward = new ActionForward();
...
return forward;
}
public ActionForward deleteUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
ActionForward forward = new ActionForward();
...
return forward;
}
}
一个验证信息正确性loginValidate,一个删除一个记录deleteUser方法,
用method=方法名来指定要调用的方法。
新建一个jsp页面login.jsp,注意:form表单的action的值:::
<html:form action="/loginAction.do?method=loginValidate" method="POST"> 用户名:
<html:text property="au_lname"/>
<br>
<html:submit property="submit" value="Submit"/>
<br>
<html:reset value="Reset"/>
</html:form>
验证信息。
再建一个jsp页面delete.jsp,主要内容如下:::
<html:form action="/loginAction.do?method=deleteUser" method="POST"> 用户名:
<html:text property="au_lname"/>
<br>
<html:submit property="submit" value="Submit"/>
<br>
<html:reset value="Reset"/>
</html:form>
根据用户名删除。
在struts-config.xml配置一个parameter="method"属性键值对:
<action-mappings>
<action name="loginForm" parameter="method" path="/loginAction" scope="request" type="com.aptech.dispatchactiondemo.action.LoginAction">
<forward name="error" path="/error.jsp" />
<forward name="success" path="/success.jsp" />
<forward name="deletesuccess" path="/deletesuccess.jsp" />
</action>
</action-mappings>
第二种
这一种的struts-config.xml与第一种的相同,也要有parameter=""属性。
分析以下第一种方式:Action中有两个方法,对应两个jsp页面、具体为对应两个表单、两个action="/loginAction.do"路径,
而第二种方法是只有一个jsp页面、即一个表单,具体如下:
...
<h1>下面表单中的“添加”和“修改”按钮都可以提交表单,但不是JSF</h1>
<p>
<html:form action="/demoAction.do" method="POST">
<%--提交的路径还是*.do --%>
userName:
<html:text property="userName"/>
<br>
password:
<html:password property="password"/>
<br>
<input type="hidden" name="method" value="add"/>
<%--
添加了一个hidden隐藏文本域,name的值method与
struts-config.xml里面的parameter的值method相同
--%>
<input type="submit" onclick="method.value='add'" value="添加"/>
<input type="submit" onclick="method.value='modify'" value="修改"/>
<%--两个sumbit按钮,在onclick方法上更改method的值--%>
</html:form>
...
上面的表单有两个提交按钮,特别的是有一个hidden隐藏域的作用。
再就是验证的问题:
一般流程是如果表单数据未通过ActionForm的验证,则会返回struts-config.xml中该Action对应的input指定的路径。
但在继承的DispatchAction类中,多个Action指向同一个配置文件,举个小例:
现有两个页面(用户注册页面、用户资料修改页面)指向同一Action(继承自DispatchAction)和ActionForm(验证信息基本相同),当ActionForm验证失败时,分别需要返回到注册页面和修改页面,但struts-config.xml中的input只能设置一个值,这时怎么办?
虽然你的XXXDispatchAction的class实例只有一个,例如com.xyh.emp.EmployeeAction, 但是在struts-config.xml的ActionMappings里面可以映射为多个 <action> 标记,例如:
<action
path= "/registerEmployee "
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>
那么在JSP里面就可以这么分别描述表单标签。
· <html:form action= "registerEmployee.do "/>
· <html:form action= "editEmployee.do "/>
这样你不仅能为不同的行为指定不同的“action”, 自然就可以使用不同的input页, 分别指定validate是true或者false, 甚至可以使用不同的ActionForm。
说白了就是DispatchAction的类实例只有一个, 但是可以通过不同的path映射为不同的“行为”, 这不是Struts的缺点,反而正好是它的优点。
Validator框架对ActionFrom进行验证的时候有两种识别FormBean的方式, 一种是使用BeanName,就是action标签里面的name= "employeeForm ", 另一种是使用path,就是action标签里面的path= "/regEmployee ", 那么在使用了DispatchAction的情况下,如果使用Validator进行验证的话, 你的XXXXForm只需要继承ValidatorActionForm或DynaValidatorActionForm, 然后在validation.xml文件里面form标签里面的name属性使用该映射action的path就可以了。
分享到:
相关推荐
一个比较简单的struts的dispatchAction 类的入门案例,适合初学者理解dispatchAction
Struts(DispatchAction) + 存储过程 => 实现分页效果
Struts 之 DispatchAction add
解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证 你可以先参看我的blog文章:http://blog.csdn.net/qjyong/archive/2008/11/16/3311688.aspx 再决定是否下载。
最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助。在此谢谢各位!...
简单的DispatchAction实例。。。。。。。。
Struts1中怎样实现DispatchAction配置多个input属性\Struts1中怎样实现DispatchAction配置多个input属性
03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar
在页面中用js传递执行方法参数,传递到后台执行, 在你用的Action类中的方法名前加“run“及可被调用。
利用struts标签,dispatchAction,实现增删改查 有利于初学者掌握struts!
struts中的DispatchAction应用实例
自习struts时做时,大家可以互相交流一下
用struts1.2写的一个计算器示例程序,供研究struts原理的初学者参考,其中action继承的DispatchAction。
import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction等缺少
主要介绍了深入解析Java的Struts框架中的控制器DispatchAction,Struts是Java的SSH三大web开发框架之一,需要的朋友可以参考下
Struts 之 DispatchAction
04 Struts_04DispatchAction : 分发Action,根据设置的参数值提交到不同的方法进行处理业务,演示数学运算 05 Struts_05DynaActionForm : 相对应ActionForm来说,动态ActionForm只需要在配置文件中配置就可以了,...
ACCP_Y2_STRUTS指导学习1_青鸟搜藏.rar 添加书签,书签列表,TAG云图;三层结构,STRUTS,DISPATCHACTION,Struts报错机制
传智播客的struts高级实战进阶 MVC模式的回顾 回顾Struts的请求处理时序图 使用超连接的技巧 封装Formbean数据时的问题 ...DispatchAction的应用 Validator框架 Struts请求处理过程的源码分析与digester
掌握DispatchAction 掌握在Struts中使用资源文件实现国际化 学会使用Struts显示出错信息 掌握DynaActionForm的使用 学会使用实体对象作为Form属性的开发技巧