另外的配置说明如下:
Using our example from above, the XWork package for our action would be:
上例中,action对应的 XWORK package如下:
XWork package naming
com.example.actions#/#conventionDefault
Convention使用某些注解语句来覆写插件默认的action到url的映射和自动搜索渲染到的页面。此外,你还可以修改action配置文件中定义的父XWORK的包信息
Convention 插件可以使用Action注解语句来修改action返回的URL地址。本注解同时也允许包含在Actions语句中,用来使一个action对应于多个URL。在action 方法中使用本注解语句,可以参考以下代码
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
public class HelloWorld extends ActionSupport {
@Action("/different/url")
public String execute() {
return SUCCESS;
}
}
现在我们action类中将使用 /different/url 来替代默认的 /hello-world,如果未指定@Result(参考下节),result的路径将会使用action的namespace,上面的例子中将会返回一下路径 "/WEB-INF/content/different/url.jsp"。
Action类中的单个方法可以使用Actions 注解来映射多个地址。
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
public class HelloWorld extends ActionSupport {
@Actions({
@Action("/different/url"),
@Action("/another/url")
})
public String execute() {
return SUCCESS;
}
}
另外的 Action 或 Actions 的使用方法是,在单个action类中定义多个action方法,每个方法对应一个不同的地址。下面是多个action方法的范例:
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
public class HelloWorld extends ActionSupport {
@Action("/different/url")
public String execute() {
return SUCCESS;
}
@Action("url")
public String doSomething() {
return SUCCESS;
}
}
前面的例子中,第二个URL地址是不推荐的,上面url将使用java 包名作为namespace,而不会直接使用Action注解的地址。
Interceptor 和 interceptor stacks 同样可以使用interceptorRefs 注解来指定。下例演示了在action中同时添加"validation"和"defaultStack"拦截机。
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
public class HelloWorld extends ActionSupport {
@Action(interceptorRefs={@InterceptorRef("validation"), @InterceptorRef("defaultStack")})
public String execute() {
return SUCCESS;
}
@Action("url")
public String doSomething() {
return SUCCESS;
}
}
可以通过params属性来将参数传递给结果。属性的值是一个偶数个元素的String的数组,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成,举个例子:
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
public class HelloWorld extends ActionSupport {
@Action(interceptorRefs=@InterceptorRef(value="validation",params={"programmatic", "false", "declarative", "true}))
public String execute() {
return SUCCESS;
}
@Action("url")
public String doSomething() {
return SUCCESS;
}
}
如果未指定interceptors,将会使用默认的。
InterceptorRef annotation
Interceptors 可以在方法级进行指定,使用Action 注解或在类上使用InterceptorRefs注解。Class级别的拦截会被应用到类包含的所有action上。可以参考下面例子:
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
@InterceptorRefs({
@InterceptorRef("interceptor-1"),
@InterceptorRef("defaultStack")
})
public class HelloWorld extends ActionSupport {
@Action(value="action1", interceptorRefs=@InterceptorRef("validation"))
public String execute() {
return SUCCESS;
}
@Action(value="action2")
public String doSomething() {
return SUCCESS;
}
}
下面的拦截机将会应用到“action1”中:"interceptor-1","defaultStack"中的所有拦截机, "validation"
"defaultStack"中的所有拦截机也会对”action2”生效
Convention 允许action类为每个action定义不同的results,results分为两类,全局的(global)和本地的(local),全局results可以被action类中所有的action分享,这种results在action类上使用注解进行声明。本地results只能在action方法上进行声明。下面是两种results注解的例子:
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
@Results({
@Result(name="failure", location="fail.jsp")
})
public class HelloWorld extends ActionSupport {
@Action(value="/different/url",
results={@Result(name="success", location="http://struts.apache.org", type="redirect")}
)
public String execute() {
return SUCCESS;
}
@Action("/another/url")
public String doSomething() {
return SUCCESS;
}
}
参数同样可以在results中通过params属性进行传递,和上面一样,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成。可参考下例:
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
public class HelloWorld extends ActionSupport {
@Action(value="/different/url",
results={@Result(name="success", type="httpheader", params={"status", "500", "errorMessage", "Internal Error"})}
)
public String execute() {
return SUCCESS;
}
@Action("/another/url")
public String doSomething() {
return SUCCESS;
}
}
namespace注解允许action使用指定的路径替代默认的以package包名作为路径。本注解可以在action类或Java 包中的package-info.java类中进行设置。设置在action类中的namespace注解,对本action类中所有的action都有效,这是不完全合乎规范的action URL处理地址。设置在package-info.java中的namespace注解,将会改变本java包下所有的action的默认namespace。下面是此注解的例子:
com.example.actions.HelloWorld
package com.example.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@Namespace("/custom")
public class HelloWorld extends ActionSupport {
@Action("/different/url")
public String execute() {
return SUCCESS;
}
@Action("url")
public String doSomething() {
return SUCCESS;
}
}
在上例中的action 会对2个不同的地址响应:/different/url 和 /custom/url
下面是一个在package-info.java中使用namespace注解的例子
com/example/actions/package-info.java
@org.apache.struts2.convention.annotation.Namespace("/custom")
package com.example.actions;
这会改变com.example.actions包下所有action的默认namespace。请注意一点,本注解不会应用到子一级的包中。
border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #f0f0f0; padding-bottom: 1pt; border-left: me
分享到:
相关推荐
《Tomcat与Java Web开发技术详解》是孙卫琴老师撰写的一本深入解析Java Web开发和Tomcat服务器的著作,其第二版进一步更新了内容,提供了更为详尽的指导。这本书针对初学者和有一定经验的开发者,旨在帮助读者掌握...
### Java零基础-环境变量PATH配置详解 #### 一、引言 对于初学者来说,配置Java开发环境可能是一项挑战性的任务。特别是当涉及到环境变量的设置时,很多新手可能会感到困惑。本篇文章旨在帮助Java初学者理解如何...
本文将深入探讨Struts2中的常量配置,包括基本的constant配置以及零配置(Convention)的常量。 首先,让我们理解什么是Struts2的常量配置。在Struts2中,常量配置是通过`struts.xml`或`struts.properties`文件进行...
### Java零基础基础教程知识点详解 #### 一、Java简介 - **定义**:Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司于1995年推出。 - **特点**: - 跨平台性(Write Once, Run Anywhere,即编译...
**SpringMVC4零配置详解** SpringMVC作为Spring框架的一部分,是用于构建Web应用程序的控制器层。在SpringMVC4版本中,引入了“零配置”概念,旨在简化开发流程,提高开发效率。本文将深入探讨SpringMVC4的零配置...
### Java零基础 - classpath环境变量详解 #### 1. classpath环境变量的定义与作用 **classpath** 是一个环境变量,在Java编程中扮演着极其重要的角色。它指定了Java虚拟机(JVM)搜索和加载类文件(class files)的...
本教程“java视频教程_黑马Java零基础辅导班[第二期]08天课件源码”针对初学者,通过8天的课程设计,深入浅出地讲解了Java的基础知识,并提供了丰富的实践代码示例,旨在帮助学员快速掌握Java编程。 1. **Java开发...
**标题**:“学习hadoop--java零基础学习hadoop手册” **描述**:“学习hadoop--java零基础学习hadoop手册” 本手册旨在为完全没有Java基础的学习者提供一个从零开始学习Hadoop的路线图。Hadoop是一个能够处理大量...
本教程针对零基础的学习者,通过“黑马Java零基础辅导班[第二期]09天课件源码”,旨在帮助大家快速理解和实践Java编程。 教程内容分为理论讲解和实战演练两部分。理论部分涵盖了Java语言的基础概念,包括: 1. **...
标题《Java基础详解(基础)》所涵盖的知识点主要针对Java入门新手,详细讲解了Java语言的基本知识和开发环境的搭建方法。该部分涉及了Java的多个版本,包括JavaSE、JavaEE和JavaME,并强调了对于不同版本的JDK新...
### Java零基础 - 环境变量PATH详解 #### 一、引言 对于初学者而言,正确地配置Java开发环境是学习Java编程的第一步。本文将深入介绍如何配置环境变量`PATH`,并提供相应的示例源码来验证配置是否成功。无论您是...
总的来说,"Java笔记详解"覆盖了从零开始学习Java的所有基础环节,包括环境配置、基础语法、开发工具的使用以及必要的辅助工具,是Java初学者理想的参考资料。通过深入学习和实践,可以逐步掌握这门强大的编程语言,...
这个名为"JAVA编程语言视频详解.rar"的压缩包文件包含了一套详细的Java教学视频,由知名专家讲解,旨在帮助学习者从零基础开始理解和掌握Java编程。 首先,Java的环境编译是学习过程中不可或缺的一环。Java开发需要...
- 零基础Java学习者 - 需要安装配置JDK的开发者 - 对Java环境搭建感兴趣的爱好者 **使用场景及目标**: - 个人学习Java编程时,搭建开发环境 - 项目开发中,确保团队成员使用统一的Java开发环境 - 作为教学辅助资料...
### Java零基础-main方法 #### 源码详解与运行过程 本文主要针对Java初学者,详细介绍`main`方法的基本结构、语法以及如何编写和运行一个最简单的Java程序。此外,还会涉及如何利用`System.out.println`方法输出...
Java使用路径通配符加载Resource与profiles配置使用详解 本文主要介绍了Java使用路径通配符加载Resource与profiles配置使用详解。通过示例代码,详细介绍了Java使用路径通配符加载Resource与profiles配置的使用方法...