作者在 2010-11-02 11:23:36 发布以下内容
1. Action类的getter和setter方法不仅可以封装HTTP请求参数,还可以封装处理结果信息。
2. 通过ActionContext访问ServletAPI
取得参数
ActionContext ctx = ActionContext.getContext();
Map application = ctx.getApplication();
Map session = ctx.getSession();
Integer counter = (Integer) application.get("counter");
session.put("userName", userName);
使用Map application = ctx.getApplication();
Map session = ctx.getSession();
Integer counter = (Integer) application.get("counter");
session.put("userName", userName);
${ applicationScope.counter }<p/>
${ sessionScope.userName }<p/>
3. 通过aware拦截器访问ServletAPI
${ sessionScope.userName }<p/>
public class LoginAwareAction implements Action, ServletRequestAware, ApplicationAware{
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
}
public void setApplication(Map<String, Object> arg0) {
// TODO Auto-generated method stub
}
}
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
}
public void setApplication(Map<String, Object> arg0) {
// TODO Auto-generated method stub
}
}
ApplicationAware接口
CookieAware接口
ParameterAware接口
ServletRequestAware接口
ServletResponseAware接口
4. 利用动态方法处理多个提交请求:
在Action类里,添加除execute以外的方法,如method1(),mehtod2()
在调用时,指定特定action的特定方法,如
<s:submit value="regist!!!" action="loginAction!anotherE"></s:submit>
5. 利用action标签的method属性处理多个提交请求:<action name="mylogin" class="action.BookAction" mentod="xxx">
在提交相应请求的时候:function login() {
form.action = "mylogin.action";
form.submit();
}
function regist() {
form.action = "myRegist.action";
form.submit();
}
<s:submit value="ok" onclick="login()">
6. 还可以使用通配符form.action = "mylogin.action";
form.submit();
}
function regist() {
form.action = "myRegist.action";
form.submit();
}
<s:submit value="ok" onclick="login()">
<script type="text/javascript">
function test1() {
form.action = "aaAction.action";
form.submit;
}
function test2() {
form.action = "bbAction.action";
form.submit;
}
</script>
<s:form name="form">
This is my JSP page. <br>
<s:submit value="test1!!!" onclick="test1()"/>
<s:submit value="test2!!!" onclick="test2()"/>
</s:form>
在struts.xml中的配置:function test1() {
form.action = "aaAction.action";
form.submit;
}
function test2() {
form.action = "bbAction.action";
form.submit;
}
</script>
<s:form name="form">
This is my JSP page. <br>
<s:submit value="test1!!!" onclick="test1()"/>
<s:submit value="test2!!!" onclick="test2()"/>
</s:form>
<action name="*Action" class="action.LoginAction" method="{1}">
<result name="another">/anotherSuccess.jsp</result>
<result name="error">/loginError.jsp</result>
</action>
而在action类中,需配置aa(),bb()两个方法。<result name="another">/anotherSuccess.jsp</result>
<result name="error">/loginError.jsp</result>
</action>
Struts2的匹配规则是:先匹配不使用通配符的action标签,如果未找到匹配的,就从前往后寻找使用通配符的action标签,如果都没有找到,系统则抛出异常。
7. 默认action:
<default-action-ref name="xxx" />
<action name="xxx" class="xxxxxxxx">
.....
</action>
默认Action一定要在所有action之前配置。