1. 完整的action
﹤action path="/aFullAction"
type="somePackage.someActionClass"﹥
name="someForm" input="someJSP.jsp"
﹤forward name="successful" path="someJSP.jsp"/﹥
﹤forward name="failed" path="someOtherJSP.jsp"/﹥
﹤/action﹥
首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.XML的配置定位到相应的mapping(映射);接下来假如form的范围是request或在定义的范围中很难找到这个form,创建一个新的form实例;取得form实例以后,调用其reset ()方法,然后将表单中的参数放入form,假如validate属性不为false,调用validate()方法;假如validate()返回非空的ActionErrors,将会被转到input属性指定的URI,假如返回空的ActionErrors,那么执行Action的execute() 方法,根据返回的ActionForward确定目标URI。
这样做的效果是:execute()仅当validate()成功以后才执行;input属性指定的是个URI。
2. 仅有Form的action
﹤action path="/aFormOnlyAction" type="org.apache.struts.actions.ForwardAction"
name="someForm" input="someJSP.jsp" parameter="someOtherJSP.jsp"/>
首先,Struts会在定义的scope搜寻someForm,假如找到则重用,假如很难找到则新建一个实例;取得form实例以后,调用其reset()方法,然后将表单中的参数放入form,假如validate属性不为false,调用validate()方法;假如validate()返回非空的 ActionErrors,将会被转到input属性指定的URI,假如返回空的ActionErrors,那么转到parameter属性指定的目标 URI。
这样做的效果是:没有action类能够存放我们的业务逻辑,所以任何需要写入的逻辑都只能写到form的reset()或 validate()方法中。validate()的作用是验证和访问业务层。因为这里的action映射不包括forward(也没有意义),所以不能重定向,只能用默认的那个forward。这种仅有form的action能够用来处理数据获取并forward到另一个JSP来显示。
3. 仅有Action的action
﹤action path="/anActionOnlyAction" type="somePackage.someActionClass"﹥
input="someJSP.jsp"
﹤forward name="successful" path="someJSP.jsp"/﹥
﹤forward name="failed" path="someOtherJSP.jsp"/﹥
﹤/action﹥
首先,ActionServlet接收到请求后,取得action类实例,调用execute()方法;然后根据返回的ActionForward在配置中找forward,forward到指定的URI或action。
这样做的效果是:没有form实例被传入execute()方法,于是execute()必须自己从请求中获取参数。Action能够被forward或重定向。这种action不能处理通过HTML FORM提交的请求,只能处理链接式的请求。
4. 仅有JSP的action
﹤action path="/aJSPOnlyAction" type="org.apache.struts.actions.ForwardAction" parameter="someOtherJSP.jsp"/﹥
首先,ActionServlet接到请求后调用ForwardAction的execute()方法,execute()根据配置的parameter属性值来forward到那个URI。
这样做的效果是:没有任何form被实例化,比较现实的情形可能是form在request更高级别的范围中定义;或这个action被用作在应用程式编译好后充当系统参数,只需要更改这个配置文档而无需重新编译系统。
5. 两个action对应一个form
﹤action path="/anAction"type="somePackage.someActionClass"﹥name="someForm"input="someJSP.jsp"
﹤forward name="successful" path="/anotherAction.do"/﹥
﹤/action﹥
﹤action path="/anotherAction"
type="somePackage.someOtherActionClass"﹥name="someForm"input="someOtherJSP.jsp"
﹤forward name="successful" path="someResultJSP.jsp"/﹥
﹤/action﹥
就每个单独的action来讲,处理上并没有和完整的action有什么实质的区分。这个组合模式能够被用来传递命令对象(form)。需要注意的是在后一个action中同样会调用form的reset()和validate()方法,因此我们必须确保form中的信息不被重写。
处理的方式大致分为两种:
a) 在request中放入一个指示器表明前一个action有意向后一个action传递form,从而在后一个action能够保留那个form中的值,这一方式只能在使用forward时使用。b) 当使用redirect而不是forward时,能够把指示器放在session或更高的级别,在命令链的最后一环将这个指示器清除。
﹤action path="/anAction"type="somePackage.someActionClass"﹥name="someForm"input="someJSP.jsp"
﹤forward name="successful"
path="/anotherAction.do" redirect="true"/﹥
﹤/action﹥
﹤action path="/anotherAction"type="somePackage.someOtherActionClass"﹥
"name="someOtherForm"input="someOtherJSP.jsp"
﹤forward name="successful" path="someResultJSP.jsp"/﹥
﹤/action﹥
这个组合方式跟前一种在流程上没有太大区分,只是我们现在对于两个action分别提供了form,于是代码看上去更加清楚。于是我们能够分别处理Web应用程式的输入和输出。值得注意的是,后一个action同样会尝试往form中写入那些参数,但是我们能够这样处理:
a) 在后一个form中使用另一套属性名;
b) 只提供getter而不提供setter。
大致的处理是这样:
前一个action接收输入、验证、然后将数据写入业务层或持久层,重定向到后一个action,后一个action手动的从业务层/持久层取出数据,写入form(通过其他方式),交给前台JSP显示。
这样做的好处是不必保留输入form中的值,因此能够使用redirect而不是forward。这样就降低了两个action之间的耦合度,同时也避免了不必要的重复提交。
本文来自学习网(www.gzu521.com),原文地址:http://www.gzu521.com/it/ncre/ncre2/java/fudao/200903/20661.htm
分享到:
相关推荐
1. **使用Request对象**:Action通过设置`HttpServletRequest`对象中的属性来传递数据,然后在JSP页面中通过`<%= %>`或EL表达式`${ }`来获取这些属性值。这种方式简单易用,适用于小型项目。 ```java request....
2. **表单处理**:HTML表单通过`<form>`标签定义,`action`属性指定提交的URL,`method`属性定义请求类型(GET或POST)。表单控件如`<input>`、`<textarea>`、`<select>`等用于收集用户数据。 3. **请求对象**:在...
类型转换则是指Struts2能够自动将请求参数的字符串值转换为Action属性所需的类型,如将`age`的字符串值转换为整型。 为了调试和理解这个过程,可以开启Struts2的日志,查看拦截器的执行顺序和参数绑定情况。此外,...
在Action类中,可以使用JSON插件(如Struts2的Struts2-Json-plugin)来解析JSON数据并将其绑定到Action的属性上。 3. Action执行业务逻辑后,生成新的JSON数据,使用JSON插件自动序列化为JSON字符串,然后通过`...
`web.xml`文件是部署描述符,用于配置Web应用的各个组件,包括`ActionServlet`的属性。以下是对`web.xml`中`ActionServlet`属性的详细解释: 1. **config**: 此属性定义了Struts配置文件的位置。默认值是`config/${...
3. **利用Struts1的ActionMapping**:尽管不直接使用Action,但可以通过配置`struts-config.xml`,创建一个ActionMapping,其forward属性直接指向JSP。例如: ```xml <action path="/directJsp" forward="/jsp/...
在Web开发中,JSP通常作为View层,与Controller(Servlet或Action)和Model(JavaBean或业务逻辑组件)配合实现MVC架构。 八、JSP与JSF(JavaServer Faces) JSF是基于组件的Web开发框架,JSP可以作为其视图技术,...
form name="myform" id="myform" action="ssss" method="post" onsubmit="getUrl();"> javascript方法: [removed] function getUrl(){ $('form').attr('action','new_url'); } [removed] 或者用单纯的...
这篇名为“Struts2 使用action属性接收中文参数(post提交)”的博文可能讲述了如何在Struts2框架中正确处理中文POST请求。在处理中文参数时,主要涉及以下几个关键知识点: 1. **字符编码设置**: - 请求编码:...
主要元素包括:`<jsp:directive>`(指令)、`<jsp:expression>`(表达式)、`<jsp:scriptlet>`(脚本片段)和`<jsp:action>`(动作)。 **2. JSP生命周期** JSP的生命周期包括三个阶段:翻译、初始化和服务。翻译...
`<%@ page %>`用来设置整个页面的属性,如编码、错误页面等;`<%@ include %>`用于在运行时将一个文件包含到当前JSP页面中;`<jsp:forward>`则用于将请求转发到另一个资源。 2. **JSP动作元素**:比如`<jsp:useBean...
本篇文章将详细讲解如何使用Struts2的标签库,尤其是在页面上以列表的形式展示Action中集合对象的所有元素属性值。 首先,我们需要了解Struts2的核心概念:Action。Action是业务逻辑的载体,它处理请求,执行相应的...
<form action="process.jsp" method="post"> <!-- 表单元素 --> 提交"> ``` 提交后,用户会被重定向到`process.jsp`处理表单数据。 3. JavaScript的`location`对象:JavaScript提供了动态修改当前页面URL的能力...
例如,在 Action 中定义了 `userName` 属性,可以在 JSP 页面中使用 `user1!add?userName=Magci` 的方式将参数传递给 Action。 使用 DomainModel 接收参数 DomainModel 是 Struts2 中的一种模型对象,可以用来接收...
Struts2支持自动将JSP页面的表单参数绑定到Action类的相应属性。例如,如果JSP页面有这样一个表单字段: ```jsp <form action="submit.action" method="post"> ``` 在对应的Action类中,我们可以创建一个...
了解 JSP 中 request 属性的用法 JSP 中 request 属性是最基本也是最重要的对象之一,它提供了大量的方法来获取客户端的请求信息和设置服务器端的响应信息。了解 request 属性的用法是 JSP 开发中最基本的要求。 ...
%>`定义Java变量或方法,`<jsp:action>`标签用于执行特定的JSP动作。 2. **JSP生命周期** JSP的生命周期包括翻译、初始化、服务和销毁四个阶段。在翻译阶段,JSP被转换为Servlet源代码;初始化阶段,Servlet被...
5. **EL(Expression Language)**:EL是一种简洁的表达式语言,用于在JSP页面中获取和设置JavaBean属性,简化了从前的脚本表达式。 6. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL是一组标准标签库...
在这个文件中,定义了`SelectorTag`的属性、功能和如何在JSP页面中调用它。 #### 六、CSS代码的重要性 CSS(Cascading Style Sheets)代码用于美化树形菜单,确保其具有良好的视觉效果和一致的设计风格。这包括...