目录

Struts2 - 注释( Annotations)

如前所述,Struts提供了两种配置形式。 传统方法是使用struts.xml文件进行所有配置。 到目前为止,我们已经在教程中看到了很多这样的例子。 配置Struts的另一种方法是使用Java 5 Annotations功能。 使用struts注释,我们可以实现Zero Configuration

要在项目中开始使用注释,请确保在WebContent/WEB-INF/lib文件夹中包含以下jar文件 -

  • struts2-convention-plugin-x.y.z.jar
  • asm-x.y.jar
  • antlr-x.y.z.jar
  • commons-fileupload-x.y.z.jar
  • commons-io-x.y.z.jar
  • commons-lang-x.y.jar
  • commons-logging-x.y.z.jar
  • commons-logging-api-x.y.jar
  • freemarker-x.y.z.jar
  • javassist-.xy.z.GA
  • ognl-x.y.z.jar
  • struts2-core-x.y.z.jar
  • xwork-core.x.y.z.jar

现在,让我们看看如何取消struts.xml文件中的可用配置并将其替换为注释。

为了解释Struts2中Annotation的概念,我们必须重新考虑Struts2 Validations一章中解释的验证示例。

在这里,我们将举例说明一个员工的名字,年龄将使用一个简单的页面捕获,我们将进行两次验证,以确保ÜSER始终输入一个名称,年龄应在28到65之间。

让我们从示例的主JSP页面开始。

创建主页面

让我们编写主页JSP文件index.jsp ,用于收集上面提到的Employee相关信息。

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <title>Employee Form</title>
   </head>
   <body>
      <s:form action = "empinfo" method = "post">
         <s:textfield name = "name" label = "Name" size = "20" />
         <s:textfield name = "age" label = "Age" size = "20" />
         <s:submit name = "submit" label = "Submit" align="center" />
      </s:form>
   </body>
</html>

index.jsp使用了我们尚未涉及的Struts标记,但我们将在标签相关章节中研究它们。 但是现在,假设s:textfield标签打印输入字段,s:submit打印一个提交按钮。 我们为每个标签使用了label属性,为每个标签创建标签。

创建视图 (Create Views)

我们将使用JSP文件success.jsp ,如果定义的操作返回SUCCESS ,将调用它。

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
	pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <title>Success</title>
   </head>
   <body>
      Employee Information is captured successfully.
   </body>
</html>

Create Action

这是使用注释的地方。 让我们用注释重新定义动作类Employee ,然后在Employee.java文件中添加一个名为validate ()的方法,如下所示。 确保您的操作类扩展了ActionSupport类,否则将不会执行您的validate方法。

package com.iowiki.struts2;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.validator.annotations.*;
@Results({
   @Result(name = "success", Location = "/success.jsp"),
   @Result(name = "input", Location = "/index.jsp")
})
public class Employee extends ActionSupport {
   private String name;
   private int age;
   @Action(value = "/empinfo")
   public String execute() {
      return SUCCESS;
   }
   @RequiredFieldValidator( message = "The name is required" )
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   @IntRangeFieldValidator(message = "Age must be in between 28 and 65", min = "29", max = "65")
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
}

我们在这个例子中使用了很少的注释。 让我逐一介绍它们 -

  • 首先,我们已经包含了Results注释。 结果注释是结果的集合。

  • 在结果注释下,我们有两个结果注释。 结果注释具有与execute方法的结果相对应的name 。 它们还包含一个位置,该位置应该提供与execute()的返回值相对应的视图

  • 下一个注释是Action注释。 这用于装饰execute()方法。 Action方法还接受一个值,该值是调用操作的URL。

  • 最后,我使用了两个validation注释。 我在name字段上配置了必需的字段验证器,在age字段上配置了整数范围验证器。 我还为验证指定了自定义消息。

配置文件 (Configuration Files)

我们真的不需要struts.xml配置文件,所以让我们删除这个文件,让我们检查一下web.xml文件的内容 -

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee"
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">
   <display-name>Struts 2</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
      <init-param>
         <param-name>struts.devMode</param-name>
         <param-value>true</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

现在,右键单击项目名称,然后单击“ Export 》 WAR File以创建War文件。 然后在Tomcat的webapps目录中部署此WAR。 最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp 。 这将产生以下屏幕 -

电子邮件用户输入

现在不要输入任何必要的信息,只需点击Submit按钮即可。 您将看到以下结果 -

错误

输入所需信息,但输入错误的From字段,让我们将名称命名为“test”,将年龄改为30,最后单击Submit按钮。 您将看到以下结果 -

成功

Struts 2注释类型

Struts 2应用程序可以使用Java 5注释作为XML和Java属性配置的替代方法。 您可以查看与不同类别相关的最重要注释列表 -

Struts 2注释类型

↑回到顶部↑
WIKI教程 @2018