標註是取代struts.xml的一種手段,也是以後發展的目標所在,會EJB3.0的人都知道標註是如何取代XML的存在,他擁有多少的潛力,無論是JPA等orm映射還是其他的WEB框架都在進行註解的洗禮;
標識是以後發展的方向,因此對此不可視而不見,它雖然不太成熟,但瞭解卻是必然的;
首先需要改動的是web.xml:
<filter-name>struts</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<param-name>actionPackages</param-name>
//固定格式
<param-value>com.struts2.action</param-value>
//所有action所在的包
</init-param>
</filter>
以及action類的標註是如何配置的:
@ParentPackage("struts-default")
//繼承的包
@Namespace("")
//命名空間
@Results( {@Result(name="succee",value = "/succee.jsp")})
//返回頁面
另外
jsp的請求時的條件:XXXAction.java,
jsp頁面:<s:formaction="XXX">
程序:
@ParentPackage("struts-default")
@Namespace("")
@Results( { @Result(value ="/success.jsp"),
@Result(name = "error", value = "/error.jsp") })
public class DoAction {
private String username;
public String doAction() {
if (username.equals("") || username == null) {
return "error";
} else {
username = "歡迎您," +username;
setUsername(username);
return "success";
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
-----------------------------------------------------------------------------------
表示攔截器:
攔截器: @Before @BeforeResult @After
@Before 是方法之前; @BeforeResult 方法執行後,result返回前; @After result返回後;
action類:
@Before
public void add() {
System.out.println("--------------執行add()方法-----------------");
}
攔截器的標識無法與上面的標識action連用,至少我們有發現可以連用的地方,因此,他等若是struts.xml連用的,其配置爲:
<struts>
<package name="struts" extends="struts-default">
<interceptors>
<interceptorname="annotationInterceptor"
//此攔截器是必須聲明的,他是聲明你用的是標識攔截器
class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"/>
</interceptors>
<actionname="label" class="com.struts2.action.LabelAction">
<interceptor-refname="defaultStack" />
<interceptor-refname="annotationInterceptor"></interceptor-ref>
//此處action,聲明使用;
<resultname="succee">/succee.jsp</result>
</action>
</package>
</struts>