`
kyo100900
  • 浏览: 640456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二)

阅读更多

文节是文章的第二部分,主要讲的是页面如何显示Action中的属性,以及在无XML文件配置情况下,轻松实现校验功能。

 

如何将我们的数据显示在页面上呢?

 

 

当服务器处理完了,我们需要将数据显示在页面模板上。通常为说,我们会在StrutsAction设置一些property(属性),这样在页面就可以直接取出来了。这些property的值也许来自于你自己的数据库,也许又是你自己的一系列业务逻辑处理后的结果,但页面可没有这么聪明它们是怎么来的。它们只知道:你要显示的属性是可用的,我的工作就是负责显示它们而已,我才不管它们具体是什么。相反地,Action也并不需要知道HTML或其它EL表达示,它只是负责设置那些property即可。

 

而现在呢,我们关心的是Struts框架会不会将Action与页面模板之间自动建立映射关系。好吧,让我们先在一个Action设置一个简单的property,然后看看页面能不能像我们所预想的那样,将其显示出来。

 

"Example 3: HelloWorldAction.java"

package actions;
public class HelloWorldAction  {
  private String greeting;
  public String getGreeting() {
    return greeting;
  }
  public String execute() {
    greeting = "The server time is " + new java.util.Date().toString();
    return "success";
  }
}

 

注意现在Action已经是一个“POJO”了(一个标准的Struts2特性)。因为在这个例子里我们不需要框架为我们提供什么额外的服务,所以不需要继承什么基类呀,实现什么接口呀。但如果你一定要指出什么特别的地方,就是那个“execute()”方法了。还有一个地方就是这个类一定要有“Action”为类名的后缀。

 

现在我们要将原来的hello-world.jsp稍微改一改,这样就能看到这次的更新信息了。更新后的页面为"Example 4: hello-world.jsp (2)"

 

"Example 4: hello-world.jsp (2)"

 
<html>
 <body>
  <p>
   Hello World!
  </p>
  <p>
   ${greeting}
  </p>
 </body>
</html>

 

 

 

当然我们需要将用Struts2的标签来代替JSTL了,但<s:property value="greeting"/>看上去确实比${greeting}麻烦不少。更新后的结果请看图2:(注意:Struts2.0.11以后版本,是不支持EL表示的,所以如果你的版本是新版本,这里的${greeting}要换成<s:property value="greeting"/>,我是为保证原文,才没有改动。)

 

 

"图2"

图2

 

 

 

 

SmartURLs可以校验我们的数据项吗?

 

Struts2这样强大的Action框架,Action可以在运行时改变工作流程方向,从而输出各种不同的页面。比如说,我们想收集一些页面提交的数据。如果数据输入正确呢,我们就会跳转到其它页面;但如果不正确的话,我们就希望它能返回到输入页面,让用户可以重新输入。因此验证流程是框架提供的一个很特殊的服务。现在我们来看Example 5: HelloWorld.java (2),这次我们继承了基类ActionSupport

 

"Example 5: HelloWorld.java (2)"

 
package actions;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.*;
@Validation()
public class HelloWorld extends ActionSupport {
  private String greeting;
  @RequiredStringValidator(message="Please enter a greeting!")
  public String getGreeting() {
    return greeting;
  }
  public void setGreeting(String value) {
    greeting = value;
  }
}

 

 

 

因为我们继承了Action的原因,SmartUTLs这次又要求我们去掉Action”作为类名的后缀了。 

Example5中,我们使用了Annotation来实现我的消息验证功能(又一个Struts2的特性,AnnotationJava5引入,使用时,需要使用@符号)。Struts2SmartURLs加上Annotation的使用成了Struts2 XML配置的可选方案了。在“Example 5”中,我们用了AnnotationRequiredString valodator(验证)同属性粘在一起了。框架提供了所有通过的验证valodator

 

为了能看到收集的验证信息,我们需要增加一个新的页面,请看"Example 6: hello-world-input.jsp".

 

 

"Example 6: hello-world-input.jsp"

 

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
 <body>
  <p>
   What would you like to say to the world?
  </p>
  <s:form action="hello-world">
    <s:textfield label="Greeting" name="greeting" />
    <s:submit />
  </s:form>
 </body>
</html>

 

 

3上 : 显示了要绑定的输入验证页面。

 

" 3: "

图3

这时,如果我们什么都不输入,直接提交,当然验证会失败,然后会返回result code为“input”的输入页面。在这里SmartURLs会回返到先前的 hello-world-input.jsp”页面中去。以下图4就是验证后的结果:

 

" 4: "

图4  

如果我们提交的信息通过了验证,那么就会显示图5的结果页面:

 

"图 5:"

 

图5

 

现在你也发现了,我们不需要任何XML配置文件也可以实现正常的工作流程!在这里,仅仅是使用了Annotation @RequiredString Validator,剩下的全是靠CoC来完成的。

 

明天剩下最后一部分了,关于以及SmartURLs安装部分,总体来说Ted Husted的这篇文章通俗易懂,比较适合初学者。而且让大家也看到了Struts2也可以如此简化,继续..........

 

BWT: 程序代码还是在附件里,里面可能与文章有一点点不同,里面有一个Readme.txt。

  • smartapp.rar (5.1 KB)
  • 描述: 这是本小节的实例。可能因为包有点大了,始终传不上来,要用到的包用《【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(一)》的附件中的lib即可,它们用的是一样的。
  • 下载次数: 64
9
1
分享到:
评论
2 楼 longint 2008-02-29  
不错的东东
1 楼 kyo100900 2008-02-28  
  不好意思,网速实在太慢了, 附件传不上去,只能明天传了

相关推荐

    【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(一)

    在"【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(一)"这篇文章中,作者Ted Husted深入探讨了如何利用Struts2实现Container-Managed Conventions(容器管理的约定)编程风格,也就是CoC风格,它简化了...

    【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(三)完

    在“Struts2其实也可以CoC风格编程”系列中,专家Ted Husted探讨了如何利用Struts2的核心原则——Convention over Configuration(约定优于配置)来简化开发流程。这一系列教程的第三部分,主要是对前两部分理论和...

    《Struts in Action中文版》真正完整版

    #### 二、Struts框架的由来和发展 1. **Struts的创建者:** - Struts是由**Gavin King**在2000年创建的。 - **为何开源?** - 开源意味着任何人都可以自由地使用、修改和分发Struts框架,这有助于Struts社区的...

    Struts在行动(Struts in Action 中文版)

    Struts在行动,使用领先的JAVA框架构建Web应用。 Ted Husted Cedric Dumoulin George Franciscus David Winterfeldt(著) Eric Lin(译) 注:本文仅用于个人研究,如有需要请购买正版。

    (Struts in Action)Stuts在行动 使用领先的Java框架构建Web应用

    Ted Husted Cedric Dumoulin George Franciscus David Winterfeldt (著) Eric Liu (译) 分为八个章节,详细介绍了MVC和struts的原理。语言浅显直白,适合初学者看。

    Struts在行动使用领先的Java框架构建Web应用

    Struts在行动 使用领先的Java框架构建Web应用 Ted Husted Cedric Dumoulin George Franciscus David Winterfeldt (著) Eric Liu (译)

    Struts书籍 Struts_In_Action_中文版

    本书作者Ted Husted,由Eric Liu(铁手)翻译。 **1.1.1 谁创建了Struts?** Struts框架最初由Gavin King在2000年创建。他当时的目标是为了解决在Java Web开发中常见的问题,提供一种标准化的方式来处理用户请求和...

    Struts in Action 中文版.pdf

    《Struts in Action》这本书由Ted Husted撰写,Eric Liu(铁手)翻译,是一部深入讲解Struts框架的中文版著作。Struts是基于Java的一个领先Web应用框架,它采用了模型-视图-控制器(MVC)设计模式,极大地简化了Web...

    struts技术文档

    ### Struts 技术文档知识点总结 #### 一、Struts 框架简介与背景 **1.1 关于本书** - **作者**: Ted Husted...这些内容对于初学者来说是非常宝贵的资源,可以帮助他们快速入门并掌握如何使用Struts进行高效开发。

Global site tag (gtag.js) - Google Analytics