Struts2提供了按照约定和Java注解来替代struts.xml实现零配置的功能,但实际应用往往会两者结合使用。要想使用约定和注解只需将struts2-convention-plugin-2.1.8.1.jar放到WEB-INF\lib下,struts2框架就会将action、actions、struts和struts2下的所有以Action结尾或者继承SupportAction的类作为Action,当然我们也可以自己设置Action的上级包(在struts.xml中加上<constant name="struts.convention.package.locators"value="action" />),也可通过struts.convention.action.suffix常量设置Action类类名的后缀,默认为Action。然后在Action类上通过以下标注取代文件配置:
@Namespace("/login")
@Results({
@Result(name= LoginAction.LOGIN_PAGE, location ="/WEB-INF/jsp/layout/login.jsp"),
@Result(name = LoginAction.USER_PAGE, location ="/WEB-INF/jsp/layout/userInfo.jsp")
})
public class LoginAction extendsActionSupport{
…
}
例如一个类命名为SearchAction,那么Struts2框架会自动扫描它,认为它为一个Action类,并将所有search.action的请求都交给该类进行处理,这时我们遇到一个问题:Action类往往有多个method,那该如何指定处理方法呢?我们可以在请求中加上!methodName以请求该Action的指定method,例如想要请求SearchAction的search方法,我们可以这样请求:search!search.action。
我们都知道在XML中可以定义Action处理完以后的跳转,同样利用注解也可以做到这一点,我们只需要在Action类上加上@Result即可以指定Action的跳转,例如:
@Results({
@Result(name="input"value="/input.jsp" type=NullResult.class),
@Reuslt(name="success"value="/success.jsp")
})
上面是一个典型的多Result配置:name属性指定返回的字符串;value属性指定要跳转的页面;type属性指定Result的类型,type是一个很重要的属性,它有以下3种情况:
1)NullResult :默认的,可省略
2)ActionChainResult: 用于从一个Action跳转到另一个Action,例如:
@Result (name="search",value="search", type=ActionChainResult.class, params={“method”, "search"})
这个配置的意思是:如果返回值为"search"就跳转到SearchAction的search方法,如果不指定params就跳转到SearchAction的execute方法。
3)StreamResult:用于文件下载,例如:
@Result (name="success", value="inputStream",type=StreamResult.class, params={"bufferSize",FileConstant.DOWNLOAD_BUFFER_SIZE})
相关文档:
struts2:零配置 之 21.2 约定大于配置
struts-convention零配置--约定大于配置
Struts2 零配置----详解