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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值