代码改变世界

Struts2 注解约定

2013-11-16 19:47  lenzl  阅读(341)  评论(0)    收藏  举报

 1.1 struts2 查找acton类规则

(1)搜索包名

★  Convention插件会自动搜索位于strutsstruts2, action or actions的包及其子包下的所有java类,以搜索Action类

★  可以通过在struts.xml中配置,改变默认的搜索的文件夹,如下实例:

<constant name =”struts.convention.package.locators” value=”web ,s2”>

如上配置后,插件将搜索web,s2的文件夹及其子文件夹。

 

(2)搜索action类

在搜索的包下,按如下规则找action类

★    实现了com.opensymphony.xwork2.Action 的类

★    类名以Action结尾

例如:

com.example.actions.MainAction

com.example.actions.products.Display(implements com.opensymphony.xwork2.Action)

com.example.struts.company.details.ShowCompanyDetailsAction

 

1.2 映射的action name

★ 类名中含有Action:去掉Action,全部小写

例如:com.example.actions.MainAction -> /main

★类名中不含有Action :

例如:com.example.actions.products.Display -> /products/display

★驼峰标识(单词首字母大写,其他字母小写):

例如:

com.example.struts.company.details.ShowCompanyDetailsAction-> /company/details/show-company-detail

 

1.3 映射命名空间

★从定义的package.locators开始到包结束部分

例如:

com.example.actions.MainAction -> /

com.example.actions.products.Display -> /products

com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details

★命名空间对应result 页面

例如:/company/details对应的页面,应该放在WEB-INF/content/company/details文件夹下面。

 

1.4 对应result页面的约定

★ 默认的结果页面存储在WEB-INF/content文件夹下

通过配置 struts.xml 改变默认路径:

<constant name =” struts.convention.result.path” value=” /WEB-INF/content/X”>

★如果没有对应的Action存在,则访问资源的名称与对应页面名称一样,注意都小写。

★优先按照“action URL + result的字符串+文件类型的后缀 ”,如果没有对应页面按照“action URL + 文件类型的后缀”

例如:

URL

Result

File that could match

Result Type

/hello

success

/WEB-INF/content/hello.jsp

Dispatcher

/hello

success

/WEB-INF/content/hello-success.htm

Dispatcher

/hello

success

/WEB-INF/content/hello.ftl

FreeMarker

/hello-world

input

/WEB-INF/content/hello-world-input.vm

Velocity

/test1/test2/hello

error

/WEB-INF/content/test/test2/hello-error.html

Dispatcher

1.5 Action链的约定

如果希望一个Action处理结束后不是进入一个试图页面,而是进行另一个Action形成的Action链。通过Convention插件则只需遵守如下三个约定即可。

1)  第一个Action返回的逻辑视图字符串没有对应的视图资源

2)  第二个Action与第一个Action处在同一个包下

3)  第二个Action影射的URL为:firstActionURL+resultCODE

如,第一个Action为OneAction,里面有个方法返回为“two”,那么就得保证,WEB-INF/content/下没有one.jsp或one-two.jsp 对于第二个action 它的名字应该是OneTwoAction,而对应的url应该是:“one-two.action”

注意:由于Convention插件根据Action和jsp页面来动态生成映射的,因此不管是Acion的改变,还是JSP页面的改变都需要Convention插件重新加载映射。那么只要我们为struts2应用配置如下两个常量就可以了。

<!--配置struts2应用于开发模式--!>

<constant name=”struts.devMode” value=”true”/>

<!—配置Convention插件自动重加载映射--!>

<constant name=”struts.convention.classes.reload” value=”true”/>