先贴代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name="defaultPackage" extends="struts-default">
<action name="UserAction" class="com.act.UserAction" >
<result name="logout">index.jsp</result>
</action>
<action name="login" class="com.act.UserAction" method="execute">
<result name="success">personal_page.jsp</result>
</action>
</package>
</struts>
可以看到,我在package中配置了两组action标签,这两组的用法稍有不同
name属性对应form表单里的action,class则是方法所在的类,method是执行的方法。
result标签的name则是方法的返回值(字符串),中间的是执行之后去到的页面。
第一种是:
“actio名中写了类名及方法的,如UserAction!logout”
如果使用这种提交方法,在action标签里不需要写method,在一个action标签下可以包含多个result标签,用result name区分返回值,以跳转到不同的页面
//对应的form表单
<form action="UserAction!logout" method="post">
<input type="submit" value="退出登录">
</form>
//UserAction类里的方法
public String execute() throws Exception
{
System.out.println(user.account);
System.out.println(user.password);
session.put("account", user.account);
return SUCCESS;
//返回值为success,匹配上了result name="success"的标签
}
//action标签
<action name="UserAction" class="com.act.UserAction" >
<result name="logout">index.jsp</result>
</action>
第二种是:
“action名没有标明类和方法的,如login”
如果使用这种提交方法,在action标签中要写上method,否则就会使用默认的execute。而且action标签中只能包含一个result标签。
//对应的form表单
<s:form action="login" method="post">
<s:textfield name="user.account" label="account "></s:textfield><br>
<s:textfield name="user.password" label="password"></s:textfield>
<!-- label的文字在框外,value的在框内 -->
<s:submit value="sign in"></s:submit>
</s:form>
//UserAction类中的方法
public String logout()
{
session.put("account", "");
return "logout";
//不加返回值的话,貌似就会停留在Action类里,而不是跳转到网页。这里的返回值logout与result标签的name="logout"对应
}
//action标签
<action name="login" class="com.act.UserAction" method="execute">
因为在form表单中没有用!标示方法,所以要写上execute(要调用的方法名)
<result name="success">personal_page.jsp</result>
</action>
此外,我这两个action标签都是在没有设置namespace的情况下配置的,如果要在不同的名称空间下配置,就要修改form表单和action标签
< form action=“login” namespace="/xxx" >
< action="/xxx/login.action >