`
kyo100900
  • 浏览: 633844 次
  • 性别: 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  
  不好意思,网速实在太慢了, 附件传不上去,只能明天传了

相关推荐

Global site tag (gtag.js) - Google Analytics