`

struts2 convention annotation

 
阅读更多

转载地址:http://blog.163.com/han8787@126/blog/static/3247785820118236627614/

 

 

Annotation 参考
Convention使用某些注解语句来覆写插件默认的action到url的映射和自动搜索渲染到的页面。此外,你还可以修改action配置文件中定义的父XWORK的包信息
Action annotation
Convention 插件可以使用Action注解语句来修改action返回的URL地址。本注解同时也允许包含在Actions语句中,用来使一个action对应于多个URL。在action 方法中使用本注解语句,可以参考以下代码:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5.
6. public class HelloWorld extends ActionSupport {
7. @Action("/different/url")
8. public String execute() {
9. return SUCCESS;
10. }
11. }
现 在我们action类中将使用 /different/url 来替代默认的 /hello-world,如果未指定@Result(参考下节),result的路径将会使用action的namespace,上面的例子中将会返回 一下路径 "/WEB-INF/content/different/url.jsp"。
Action类中的单个方法可以使用Actions 注解来映射多个地址。

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Actions;
6.
7. public class HelloWorld extends ActionSupport {
8. @Actions({
9. @Action("/different/url"),
10. @Action("/another/url")
11. })
12. public String execute() {
13. return SUCCESS;
14. }
15. }
另外的 Action 或 Actions 的使用方法是,在单个action类中定义多个action方法,每个方法对应一个不同的地址。下面是多个action方法的范例:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Actions;
6.
7. public class HelloWorld extends ActionSupport {
8. @Action("/different/url")
9. public String execute() {
10. return SUCCESS;
11. }
12.
13. @Action("url")
14. public String doSomething() {
15. return SUCCESS;
16. }
17. }
前面的例子中,第二个URL地址是不推荐的,上面url将使用java 包名作为namespace,而不会直接使用Action注解的地址。
Interceptor interceptor stacks 同样可以使用interceptorRefs 注解来指定。下例演示了在action中同时添加"validation"和"defaultStack"拦截器。

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Actions;
6.
7. public class HelloWorld extends ActionSupport {
8. @Action(interceptorRefs={@InterceptorRef("validation "), @InterceptorRef("defaultStack")})
9. public String execute() {
10. return SUCCESS;
11. }
12.
13. @Action("url")
14. public String doSomething() {
15. return SUCCESS;
16. }
17. }
可以通过params属性来将参数传递给结果。属性的值是一个偶数个元素的String的数组,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成,举个例子:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Actions;
6.
7. public class HelloWorld extends ActionSupport {
8. @Action(interceptorRefs=@InterceptorRef(value="validation",params={"programmatic ", "false", "declarative", "true}))
9. public String execute() {
10. return SUCCESS;
11. }
12.
13. @Action("url")
14. public String doSomething() {
15. return SUCCESS;
16. }
17. }
如果未指定interceptors,将会使用默认的。
InterceptorRef annotation
Interceptors 可以在方法级进行指定,使用Action 注解或在类上使用InterceptorRefs注解。Class级别的拦截会被应用到类包含的所有action上。可以参考下面例子:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Actions;
6.
7. @InterceptorRefs({
8. @InterceptorRef("interceptor-1"),
9. @InterceptorRef("defaultStack")
10. })
11. public class HelloWorld extends ActionSupport {
12. @Action(value="action1", interceptorRefs=@InterceptorRef("validation "))
13. public String execute() {
14. return SUCCESS;
15. }
16.
17. @Action(value="action2")
18. public String doSomething() {
19. return SUCCESS;
20. }
21. }
下面的拦截机将会应用到“action1”中:"interceptor-1","defaultStack"中的所有拦截机, "validation"
"defaultStack"中的所有拦截机也会对”action2”生效
Result annotation
Convention 允许action类为每个action定义不同的results,results分为两类,全局的(global)和本地的(local),全局 results可以被action类中所有的action分享,这种results在action类上使用注解进行声明。本地results只能在 action方法上进行声明。下面是两种results注解的例子:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Actions;
6. import org.apache.struts2.convention.annotation.Result;
7. import org.apache.struts2.convention.annotation.Results;
8.
9. @Results({
10. @Result(name="failure", location="fail.jsp")
11. })
12. public class HelloWorld extends ActionSupport {
13. @Action(value="/different/url",
14. results={@Result(name="success ", location="http://struts.apache.org ", type="redirect")}
15. )
16. public String execute() {
17. return SUCCESS;
18. }
19.
20. @Action("/another/url")
21. public String doSomething() {
22. return SUCCESS;
23. }
24. }
参数同样可以在results中通过params属性进行传递,和上面一样,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成。可参考下例:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Actions;
6. import org.apache.struts2.convention.annotation.Result;
7. import org.apache.struts2.convention.annotation.Results;
8.
9. public class HelloWorld extends ActionSupport {
10. @Action(value="/different/url",
11. results={@Result(name="success ", type="httpheader", params={"status", "500", "errorMessage", "Internal Error"})}
12. )
13. public String execute() {
14. return SUCCESS;
15. }
16.
17. @Action("/another/url")
18. public String doSomething() {
19. return SUCCESS;
20. }
21. }
Namespace annotation
namespace 注解允许action使用指定的路径替代默认的以package包名作为路径。本注解可以在action类或Java 包中的package-info.java类中进行设置。设置在action类中的namespace注解,对本action类中所有的action都有 效,这是不完全合乎规范的action URL处理地址。设置在package-info.java中的namespace注解,将会改变本java包下所有的action的默认 namespace。下面是此注解的例子:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.Namespace;
6.
7. @Namespace("/custom")
8. public class HelloWorld extends ActionSupport {
9. @Action("/different/url")
10. public String execute() {
11. return SUCCESS;
12. }
13.
14. @Action("url")
15. public String doSomething() {
16. return SUCCESS;
17. }
18. }
在上例中的action 会对2个不同的地址响应:/different/url 和 /custom/url
下面是一个在package-info.java中使用namespace注解的例子:

1. @org.apache.struts2.convention.annotation.Namespace("/custom")
2. package com.example.actions;
这会改变com.example.actions包下所有action的默认namespace。请注意一点,本注解不会应用到子一级的包中。
ResultPath annotation
ResultPath 注解用来更改默认的results存储路径,注解可以放到action的类中,也可以放到package-info.java 文件夹中。参考下例:

1. package com.example.actions;
2.
3. import com.opensymphony.xwork2.ActionSupport;
4. import org.apache.struts2.convention.annotation.Action;
5. import org.apache.struts2.convention.annotation.ResultPath;
6.
7. @ResultPath("/WEB-INF/jsps")
8. public class HelloWorld extends ActionSupport {
9. public String execute() {
10. return SUCCESS;
11. }
12. }
上面的result将以 WEB-INF/jsps 替换默认的 WEB-INF/content
ParentPackage annotation
ParentPackage注解用来定义具体action类的父XWork包或java包,下面例子演示了在action类上使用本注解:

package com.example.actions;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;

@ParentPackage("customXWorkPackage")
public class HelloWorld extends ActionSupport {
public String execute() {
return SUCCESS;
}
}
ExceptionMapping Annotation
ExceptionMapping 注解用来影射action抛出的异常。可以参考exception mapping documentation 获得详细信息。注解用类级别,在这种情况下,注解会应用到类里面的所有action

1. @ExceptionMappings({
2. @ExceptionMapping(exception = "java.lang.NullPointerException", result = "success", params = {"param1", "val1"})
3. })
4. public class ExceptionsActionLevelAction {
5.
6. public String execute() throws Exception {
7. return null;
8. }
9. }
可以在ExceptionMapping注解中使用params 属性来传递具体值给结果渲染页。ExceptionMapping注解同样可以在action级别进行设置:

1. public class ExceptionsMethodLevelAction {
2. @Action(value = "exception1", exceptionMappings = {
3. @ExceptionMapping(exception = "java.lang.NullPointerException", result = "success", params = {"param1", "val1"})
4. })
5. public String run1() throws Exception {
6. return null;
7. }
8. }
Actions in jar files
默 认情况下,Convention 插件不会从jar文件中寻找action。如果想实现这一功能,jar文件必须被 struts.convention.action.includeJars 所定义的正则 匹配到。在例子中 myjar1.jar和 myjar2.jar 将被插件检测到:

1. <constant name="struts.convention.action.includeJars" value=".*/myjar1.*?jar(!/)?,.*/myjar2*?jar(!/)?" />
提示:正则表达式只针对jar文件的路径进行匹配,而不是文件名。jar的URL应该包含jar文件的路径并以"!/"结尾。
Automatic configuration reloading
Convention插件可以自动重新加载配置的功能,无需重启容器,就可以刷新类中包含的action。这自动加载automatic xml 配置文件类似。你必须在struts.xml 中添加以下代码来启用本功能:

1. <constant name="struts.devMode" value="true"/>
2. <constant name="struts.convention.classes.reload" value="true" />
此功能没有在所有容器中进行过测试,强力建议不要在生产环境中使用。

分享到:
评论

相关推荐

    STRUTS2 Convention零配置

    与之前的Codebehind插件不同,Convention插件更加彻底地摆脱了对配置文件的需求,包括struts.xml以及Annotation等传统配置方式,通过约定而非配置的方式自动完成框架的配置工作。 ### Convention 插件特性详解 ###...

    Struts2使用Annotation返回Json

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.interceptor.SessionAware; public class MyAction ...

    在嵌入式jetty环境下运行struts2Annotation项目

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class HelloWorldAction extends ActionSupport { @Action(value = "hello", results...

    struts2利用注解annotation实现文件下载

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import com.opensymphony.xwork2.ActionSupport; @Action(value = "download", params = {...

    struts2 annotation 文件下载

    import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spring...

    struts2零配置convention-plugin

    从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行...

    struts annotation Hello World

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class HelloWorldAction extends ActionSupport { @Action(value = "hello", results...

    Struts2-rest插件(有注释)

    Convention 插件彻底地抛弃了配置信息,不仅不需要使用 struts.xml 文件进行配置,甚至不需要使用 Annotation 进行配置。而是由 Struts 2 根据约定来自动配置。 Convention 这个单词的翻译过来就是“约定”的意思。...

    struts2注解详解

    相较于 Codebehind,Convention 插件更加彻底地简化了配置过程,不仅不需要使用 struts.xml 文件来进行配置,甚至也不再需要使用 Annotation 进行配置。相反,它依赖于框架内的一系列约定来自动配置应用程序中的 ...

    struts2注解必须包

    在Struts2中,注解(Annotation)是开发者常用的一种元数据表示方式,它允许我们在代码中直接标注信息,简化配置文件。"struts2注解必须包"指的是Struts2提供的一系列注解,它们对于简化Struts2应用的配置和增强其...

    struts2 annotaion

    import org.apache.struts2.convention.annotation.Action; public class HelloWorld extends ActionSupport { @Action("/different/url") public String execute() { return SUCCESS; } } ``` 这段代码表示,...

    Struts2零配置

    **Struts2 Convention插件**是实现零配置的关键组件。它通过一套预设的规则来自动处理常见的配置任务,使得开发者无需在配置文件中显式指定每个Action的处理细节。具体而言: 1. **约定**:Convention插件提供了一...

    Struts2 注解 Demo

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class HelloWorldAction { @Action(value = "hello-world") @Result(name = ...

    struts2-core-2.0.11源码

    10. **注解支持(Annotations)**:从Struts2.1版本开始,框架引入了注解支持,允许开发者在Action类和方法上使用注解进行配置,这部分代码位于`org.apache.struts2.convention.annotation`包中。 在研究源码时,...

    Maven实现struts2注解

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class HelloWorldAction { @Action(value = "/hello", results = { @Result(name...

    struts2 使用注解现在零配置不需要在使用struts.xml配置文件,可以直接跑

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class TestAction extends ActionSupport { @Action(value = "testAction", results ...

    Struts2 ajax json使用介绍

    import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class AjaxAction extends ActionSupport { private String message; @Action...

    Struts2_API

    - Struts2的插件机制允许开发者轻松地扩展框架功能,如 strut2-dojo-plugin 提供了与Dojo JavaScript库的集成,strut2-convention-plugin 实现了自动Action映射。 8. **国际化与本地化**: - Struts2提供了强大的...

Global site tag (gtag.js) - Google Analytics