Struts2 注解约定
2013-11-16 19:47 lenzl 阅读(341) 评论(0) 收藏 举报1.1 struts2 查找acton类规则
(1)搜索包名
★ Convention插件会自动搜索位于struts, struts2, 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”/>
浙公网安备 33010602011771号