1.一个页面中有多个submit 写法页面
<s:form action="submit" namespace="">
<s:textfield name="msg" label="Please input content:"/>
<s:submit name="save" value="Save" method="save"/>
<s:submit name="print" value="Print" method="print"/>
</s:form>
struts.xml
<package name="struts2" extends="struts-default">
<action name="submit" class="action.SubmitAction">
<result name="print">/result.jsp</result>
<result name="save">/result.jsp</result>
</action>
</package>
Action
package action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class SubmitAction extends ActionSupport implements ServletRequestAware {
private String msg;
private javax.servlet.http.HttpServletRequest request;
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String save() {
request.setAttribute("result", "Save sucessfully [" + msg + "]");
return "save";
}
public String print() {
request.setAttribute("result", "Print sucessfully [" + msg + "]");
return "print";
}
}
犯的错误:save() 和 print() 方法的返回值写错了,报 No result defined for action action.SubmitAction and result result 错误
2.使用<include>标签重用配置文件
新建一个struts2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="submit" class="action.SubmitAction">
<result name="print">/result.jsp</result>
<result name="save">/result.jsp</result>
</action>
</package>
</struts>
在Struts.xml 中include引入
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts2.xml"/>
<package name="struts1" extends="struts-default">
<action name="sum" class="action.FirstAction">
<result name="positive">/positive.jsp</result>
<result name="negative">/negative.jsp</result>
</action>
<action name="submit" class="action.SubmitAction">
<result name="print">/result.jsp</result>
<result name="save">/result.jsp</result>
</action>
</package>
</struts>
犯的错误:多个配置文件中的package 命名也不能重复,比如struts.xml中有 struts1 的package,在Struts2.xml中就不可以再给package命名为struts1
3.Action 别名(感觉和一个页面包含多个Submit写法 作用一样)
<package name="demo" extends="struts-default" >
<action name="test" class="action.MyAction">
……
</action>
<action name="my" class="action. MyAction" method="my">
……
</action>
</package>
①必须保证MyAction类中包含my() 方法
②和在页面传递method参数比较,此方法需要在Struts.xml中配置别名
4、为Action指定参数
<action name="submit" class="action.MyAction">
<param name="param1">value1</param>
<param name="param2">value2</param>
<result name="save" >
/result.jsp
</result>
……
</action>
之后在Action类中定义setter方法即可,当struts2在调用execute之前,param1和param2的值就已经是相应参数的值了,因此,在execute方法中可以直接使用param1和param2。