欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二) 博客分类: 专家文章翻译 编程StrutsJSP框架XML 

程序员文章站 2024-02-19 20:20:22
...

文节是文章的第二部分,主要讲的是页面如何显示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"

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二)
            
    
    博客分类: 专家文章翻译 编程StrutsJSP框架XML 

 

 

 

 

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>

 

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二)
            
    
    博客分类: 专家文章翻译 编程StrutsJSP框架XML 

 

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

 

" 3: "

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二)
            
    
    博客分类: 专家文章翻译 编程StrutsJSP框架XML 

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

 

" 4: "

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二)
            
    
    博客分类: 专家文章翻译 编程StrutsJSP框架XML   

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

 

"图 5:"

 

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二)
            
    
    博客分类: 专家文章翻译 编程StrutsJSP框架XML 

 

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

 

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

 

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

【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(二)
            
    
    博客分类: 专家文章翻译 编程StrutsJSP框架XML 

  • smartapp.rar (5.1 KB)
  • 描述: 这是本小节的实例。可能因为包有点大了,始终传不上来,要用到的包用《【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(一)》的附件中的lib即可,它们用的是一样的。
  • 下载次数: 64