WebWork2教程(中文版)(3)

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式样格式化结果

你可能感兴趣的:(WebWork2教程(中文版)(3))