java开源文档大全致力于打造中国最大最全的开源文档,它提供了最全面最权威的开源资料,同时为大家提供一个交流的平台,如果您有好的想法,欢迎您投稿.
Actions是执行的基本单元。Action是一个在 WebWork配置之中被注册的类,来响应一个特定的请求。在Model-View-Controller(MVC)中,Actoin作为Controller的部分,JSP页面则作为:View。 下面的步骤是在WebWork中创建一个Action的可能方法: 1. 创建一个将会调用Action的JSP页面; 2. 创建Action类; 3. 创建一个将会处理Result的JSP页面; 4. 在xwork.xml中注册Action。 在本教程中的第一个例子正是“Hello,WebWork!”。下面的代码显示了在WebWork的配置文件xwork.xml中对于在default包下的一个Action。
|
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd"> <xwork> <!-- Include webwork defaults (from WebWork JAR). --> <include file="webwork-default.xml" />
<!-- Configuration for the default package. --> <package name="default" extends="webwork-default" />
<!-- Default interceptor stack. --> <default-interceptor-ref name="defaultStack" />
<!--Action: Lesson 03:HelloWebWorkAction. --> <actoin name=”helloWebWork” class="lesson03.HelloWebWorkAction"> <result name="success" type="dispatcher">ex01-success.jsp</result> </action> </package> </xwork> |
别担心关于default-interceptor-ref那部份。现在,我们只对Action感兴趣。这个配置文件告诉WebWork这里有个以 helloWebWork命名的Action,它将通过lesson03.HelloWebWorkAction来实现。对于这个Action,我们在其 下定义了一个名为success的Result,它指向网页ex01-success.jsp。
☆更多关于:xwork.xml
让我们来看一看调用Action的代码,这样比较清楚:
|
<html> <head><TITLE>WebWork Tutorial - Lesson 3 - Exaple 1</TITLE></head> <body> <p>Click the button below to activate HelloWebWorkAction.</p> <form action="helloWebWork.action" method="post"> <p><input type="submit" value="Hello!" /></P> </form> </body> </html> |
这是如何用网页结合WebWork:藉由通过*.action的URL。这就是我们在先前的教程中为什么用映射 "*.action" 注册 WebWork 的 "ServletDispatcher"的原因。
当我们点击了示例页面的按钮时,浏览器将发送表单中的数据到helloWebWork.action。因为这个URL适合于*.action,Servlet容器将会激活 WebWork 的 ServletDispatcher,它将会去读 xwork.xml找寻一个被称为 helloWebWork 的Action。如何这个Action找到的话,那么这个Action将会被实例化并会调用其execute()方法。
接下去就来看看Action这个类:
|
package lesson03;
import com.opensymphony.xwork.ActionSupport;
public class HelloWebWorkAction extends ActionSupport { String hello; public String getHello() { return hello; } public String execute() throws Exception { hello = "Hello,WebWork!"; //ActionSupport实现了Action接口 //SUCCESS为在Action接口中定义的字符串常量。 return SUCCESS; } } |
首先,注意这个类继承了com.opensymphony.xwork.ActionSupport,并且实现了public String execute()方法。对于启动器,你所有的Action类都应该这么做。其次,注意方法execute()只是设置了属性hello的值且返回常量SUCCESS,常量SUCCESS是一个“success”字符串。 当ServletDispatcher从execute()得到其返回的“success” 后,它会再次在xwork.xml中查找一个名为这个返回的字符串(success),找到后,转发到其配置文件中所定义的ex01- success.jsp。
|
<%@ taglib uri="webwork" prefix="ww" %> <html> <head><title>WebWork Tutorial - Lesson 3 - Example 1</title></head> <body> <ww:property value="hello" /> </body> </html> |
如果你运行这个示例,你将看到这个页面将显示”Hello WebWork!”。之所以得到这个显示,是因为<ww:property value=”hello” />标签寻找在Action类中名为hello的属性后执行的。事实上,它寻找一个访问方法,所以是在调用getHello()之后执行的。由于 HelloWebWorkAction被调用时,设置了其hello属性的值为“Hello,WebWork!”,getHello()将返回此值并将显 示在结果页面上。 Try the example!
提供数据给Action 上面的例子示范了如何使WebWork的Action工作,但如果我们无法提供数据给我们的Action,我们多不能做的更多。让我们来看个例子,它看起来像这样:
|
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd"> <xwork> <!-- Include webwork defaults (from WebWork JAR). --> <include file="webwork-default.xml" />
<!-- Configuration for the default package. --> <package name="default" extends="webwork-default" />
<!-- Default interceptor stack. --> <default-interceptor-ref name="defaultStack" />
<!--Action: Lesson 03:HelloAction. --> <actoin name=”hello” class="lesson03.HelloAction"> <result name=”error” type=”dispatcher”>ex02-index.jsp</result> <result name="success" type="dispatcher">ex02-success.jsp</result> </action> </package> </xwork> |
|
package lesson03;
import com.opensymphony.xwork.ActionSupport;
public class HelloAction extends ActionSupport { String person; public String getPerson() { return person; } public void setPerson(String person) { this.person = person; } public String execute() throws Exception { if((person == null) || (person.length() == 0)) return ERROR; else return SUCCESS; } }
|
|
<html> <head><TITLE>WebWork Tutorial - Lesson 3 - Exaple 2</TITLE></head> <body> <p>What's your name?</p> <form action="hello.action" method="post"> <p><input type="text" name="person" /><input type="submit" /></P> </form> </body> </html> |
|
<%@ taglib uri="webwork" prefix="ww" %> <html> <head><title>WebWork Tutorial - Lesson 3 - Example 2</title></head> <body> Hello, <ww:property value="person" /> </body> </html> | 让我们来分析一下有什么不同:在这个例子 中,我们通过POST来发送名为person的文本框中的数据。那是因为,在一个新的HelloAction实例被创建后,WebWork的 ServletDispatcher会试着将要被传送的数据填入Action的属性person中,所以将会调用设置方法setPerson()(事实 上,是ParametersInterceptor来完成的,我们将在教程5中学习这些 - 现在,只要知道当Action被执行时,其属性已经被设置)。 如果你看看Action类的代码,你会看到 在执行execute()时,它检查属性是否已经被设置了(也就是,form域中的数据是否已经提供了)。如果是,那么就会返回SUCCESS,因此会分 发请求到ex01-success.jsp,否则会返回ERROR,退回到ex02-index.jsp。
Try the example!
Result类型 在上面的例子中,当我们说一个Result的类型是“dispatcher”,它的意思是WebWork寻找一个被叫做dispatcher的返回类型且找到的Result类是实现它的。每当Action返回这个Result类型就会实例化那个类。 Result类 实现了com.opensymphyony.xwork.Result接口。WebWork自带了一些已经实现了的Result类,但你还是可以创建你自己的Result类。WebWork的Result类型已经被配置在了webwork-default.xml中: 1. Dispatcher -(com.opensymphony.webwork.dispatcher.ServletDispatcherResult):转发Result到指定的位置; 2. redirect - (com.opensymphony.webwork.dispatcher.ServletRedirectResult):重定向Result到指定的位置。不像dispatcher,redirect不会发送form中的数据(通过POST或GET)到指定的页面; 3. velocity - (com.opensymphony.webwork.dispatcher.VelocityResult):以一个Velocity模板作为返回结果。如果你在web.xml 中配置了 VelocityServlet,你就可以使用dispatcher转发Result到Velocity页面,不过使用Velocity result是一种较好的方式。更多关于Velocity在教程4.2种; 4. chain - (com.opensymphony.xwork.ActionChainResult):用链条锁住另外一个Action,也就是,Action的结果是另外一个Action; 5. xslt - (com.opensymphony.webwork.views.xslt.XSLTResutl):使用一份被XSLT样式表转换的XML文档作为Result。
☆更多关于:Result类型
继续下一教程 这些例子举例说明了Action和Result的主要观念:他们是单位完成(units of execution)来响应请求,依赖Result做一些处理,转发请求到一些其他的位置。虽然似乎可能简单了些,但确是WebWork框架的核心。 下面是一些能与Action一起完成的其他东东,正如你知道的,在我们进入到后面的一些教程中WebWork可以做: 1. Interceptors(拦截器),它能截获任何Action执行一个平坦的执行时间(教程5); 2. Action可以通过实现ModelDriven接口直接的与你的商业对象协作; 3. XML文件,配置确认传送到Action中的数据。如果一些数据对于你的规范来说不是有效的,那么Action不会被执行,并且把错误的消息放入Action中(参考:Validation); 4. WebWork能够自动的提供一些Action实例的组件(在不同的范围中),允许控制反转(参考:[Inversion of Control & Components])。
java开源文档研究struts,webwork,spring,tomcat,jboss,lucense,nutch,JUnit,eclipse......,如果您有什么意见,欢迎评论和留言. |