今天开始学习@Namespace注解。
还是先看一段代码:
- package com.example.actions;
- import org.apache.struts2.convention.annotation.Action;
- import org.apache.struts2.convention.annotation.Namespace;
- import com.opensymphony.xwork2.ActionSupport;
- @Namespace("/custom")
- public class HelloWorld6 extends ActionSupport {
- @Action("/H6/url")
- public String execute() {
- return SUCCESS;
- }
- @Action("url")
- public String doSomething() {
- return SUCCESS;
- }
- }
- 名称空间注释允许操作类名称空间改变而不是使用Convention Plugin约定的Java包的名称。
这是什么原因呢?
关键在于@Action("/H6/url")。此处“/H6/url”是对Action的名称空间进行了完全限定。实验证明@Namespace("/custom")注解对名称空间进行完全限定的不起作用。
- 针对某个Action类进行@Namespace注释后,该注释的效果将应用于该类中所有未完全限定的action URLs
试着在浏览器中输入http://应用服务器ip:端口/应用/url访问时,报出了错误提示信息。将@Namespace("/custom")注解去
掉,重新启动服务,再次访问,成功!再次将@Namespace("/custom")注解加上,重新启动服务,访问,失败。
此回合操作验证了一个问题,@Namespace注解已经作用到doSomething()方法上。
仔细观察每一个细节。该方法上有@Action("url")注解。它“url”的前面没有“/”。这是未完全限定的action
URL啊。这样正好说明了针对某个Action类进行@Namespace注释后,该注释的效果将应用于该类中所有未完全限定的action URLs。
这样我们在浏览器中输入http://应用服务器ip:端口/应用/cutsom/url访问时,成功。跳转页面为“/custom/url.jsp”。