从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要使用Annotation进行配置,而是由struts2根据约定自动配置。
将[struts2-convention-plugin-2.2.3.jar]导入lib
struts.xml如下配置(Com.ustb.test.*/com.ustb.leo.*都将被视为含有Action的包路径而被搜索。)
----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
<struts>
</struts>
----------------------------------
package leo.test;
import org.apache.struts2.convention.annotation.Namespace;
importorg.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/")
@ParentPackage("default")
@Results({ @Result(name = "tagSelect", location ="/JSP/TagSelect.jsp"),
})
public class MenuAction extends ActionSupport {
}
--------------------------------------------------------------------------------------------------
Strtus2 Convention Plugin 配置规则
1.官方介绍的地址:
http://struts.apache.org/2.1.6/docs/convention-plugin.html
2.struts.xml文件配置
只挑选几个重要的常量说明:
(1) <constant name="struts.locale"value="zh_CN"/>
(2) <constant name="struts.action.extension"value="action,do,,"/>
(3) <constantname="struts.enable.DynamicMethodInvocation"value="true"/>
(4) <constant name="struts.ui.theme"value="simple"/>
(5) <constant name="struts.devMode"value="true"/>
(6) <constant name="struts.convention.result.path"value="/WEB-INF/pages/"/>
(7) <constant name="struts.convention.action.suffix"value="Action"/>
(8)<constantname="struts.convention.action.disableScanning"value="false"/>
(9)<constantname="struts.convention.default.parent.package"value="default"/>
(10) <constantname="struts.convention.package.locators"value="action"/>
确定搜索包的路径。只要是结尾为action的包都要搜索。basePackage按照默认不用配置,如果配置,只会找以此配置开头的包。locators及locators.basePackage都是一组以逗号分割的字符串。
(11) <constantname="struts.convention.exclude.packages"value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate."/>
排除哪些包不搜索。按默认配置即可。逗号分割字符串。
(12) <constantname="struts.convention.action.includeJars" value=""/>
包括哪些jar包中的action。逗号分割字符串。
(13)<constantname="struts.convention.relative.result.types"value="dispatcher,freemarker,velocity"/>
默认返回的结果类型搜索。按顺序先找相关的dispatcher的jsp文件是否存在。然后再找freemarker,再找velocity。
(14)<constantname="struts.convention.result.flatLayout"value="true"/>
(15) <constantname="struts.convention.action.mapAllMatches"value="false"/>
(16)默认拦截器配置,已经简化了许多,一般不需要chain和fileupload。modelDriven也没什么用,如果我们要使用restfull插件会有用。其实最简单只要一个params就可以了。我加入exception是为了开发时的异常。servletConfig是为了包装一下request,reponse等对象,staticParams是为了可以配置${}形式参数。actionMappingParams是struts2.1新增的,我初步认为是可以在action配置中传参数,这个还有些疑问。
1.action配置
com.example.action.MainAction
com.example.action.products.Display->
com.example.action.MainAction
com.example.action.products.Display