WebWork2教程(中文版)(3)

3ActionsResults

Actions是基本执行单元,在WebWork配置中注册,用来响应特定的请求。在MVC中,Actions是控制部分。下面是在WebWork中创建Action的基本步骤:

l         创建调用ActionJSP页;

l         创建Action类;

l         创建处理Action返回结果的JSP页;

l         xwork.xml中注册Action

1Hello WebWorld的例子

l         xwork.xml文件内容如下:

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
      
      
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
      
      
 
      
      
<xwork>
      
      
       <!-- Include webwork defaults (from WebWork-2.1 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: HelloWebWorldAction. --> 
      
      
              <action name="helloWebWorld" class="lesson03.HelloWebWorldAction"> 
      
      
                <result name="success" type="dispatcher">ex01-success.jsp</result> 
      
      
              </action> 
      
      
       </package>
      
      
</xwork>
      
      

配置文件告诉WebWork,有一个叫helloWebWorldAction,由lesson03.HelloWebWorldAction实现;同时定义了一个叫success的结果,指向ex01-success.jsp页面;

l         调用Action的页面ex01-index.jsp

<html>
      
      
<head>
      
      
<title>WebWork Tutorial - Lesson 3 - Example 1</title>
      
      
</head>
      
      
 
      
      
<body>
      
      
 
      
      
<p>Click the button below to activate HelloWebWorldAction.</p>
      
      
 
      
      
<form action="helloWebWorld.action" method="post">
      
      
<p><input type="submit" value="Hello!" /></p>
      
      
</form>
      
      
 
      
      
</body>
      
      
</html>
      
      

当点击页面的按钮时,浏览器提交表单数据给helloWebWorld.action;既然URL匹配映射*.actionServlet容器激活WebWorkServletDispatcherServletDispatcher读取xwork.xml,查找名为helloWebWorldAction,如果找到就创建Action类的一个新实例,调用execute()方法

l         Action类:HelloWebWorldAction.java

package lesson03; 
      
      
 
      
      
import com.opensymphony.xwork.ActionSupport; 
      
      
 
      
      
public class HelloWebWorldAction extends ActionSupport { 
      
      
       String hello; 
      
      
       public String getHello() { 
      
      
              return hello; 
      
      
       }
      
      
       public String execute() throws Exception { 
      
      
              hello = "Hello, WebWorld!"; 
      
      
              return SUCCESS; 
      
      
       } 
      
      
}
      
      

Action类继承com.opensymphony.xwork.ActionSupport,并实现execute()方法;execute()方法的返回值SUCCESSsuccess<result>name属性值)对应;ServletDispatcher查找名字相匹配的result,转移到指定的JSPex01-success.jsp

l         结果显示JSPex01-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>
      
      

<ww:property value="hello" />Action类中查找hello属性,调用hello属性的setter方法获得属性值(在execute()中已经设置),显示Hello, WebWorld!

2)向Action提供数据的例子

xwork.xml

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
      
      
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
      
      
 
      
      
<xwork>
      
      
       <!-- Include webwork defaults (from WebWork-2.1 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. -->
      
      
              <action 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>
      
      

HelloAction.java

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;
      
      
       }
      
      
}
      
      

ex02-index.jsp

<html>
      
      
<head>
      
      
<title>WebWork Tutorial - Lesson 3 - Example 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>
      
      

ex02-success.jsp

<%@ 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方法向Action发送表单数据(使用person名),在HelloAction的实例创建以后,ServletDispatcher调用setter方法用数据设置Action的对应属性(person);因此,在执行execute()之前,person属性已经设置了

3result的类型

上面的例子中使用的result类型是dispatcher,而WebWorkresult类型已经在webwork-default.xml中配置:

l         dispatcher (com.opensymphony.webwork.dispatcher.ServletDispatcherResult) forwards 结果到指定位置URL

l         redirect (com.opensymphony.webwork.dispatcher.ServletRedirectResult) redirects结果到指定位置URL ;与dispatcher不同的是不会发送表单数据

l         velocity (com.opensymphony.webwork.dispatcher.VelocityResult:使用 Velocity 模版作为结果,需要在web.xml中配置 VelocityServlet,这是一种很好的方法

l         chain (com.opensymphony.xwork.ActionChainResult): Action链,将结果传送给另外一个Action

l         xslt (com.opensymphony.webwork.views.xslt.XSLTResult): 使用XSLT式样格式化结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值