您应该将按钮映射到实际使用的方法。缺省操作映射器允许使用按钮名称或
method属性来指定表单映射所使用的方法以外的方法。例如
<s:form action="person"> <s:textfield label="Enter your name" name="person.name"/> <s:submit value="Add person" method="add"/> <s:submit value="Create persons"/></s:form>
现在,在您执行的操作中
SessionAware
public class PersonAction extends ActionSupport implements SessionAware { private Person person = new Person(); public Person getPerson() { return person; } public setPerson(Person person){ this.person = person; } private Map<String, Object> session; public setSession(Map<String, Object> session){ this.session = session; } public String execute() { //Create persons List<Person> personList = (List<Person>) session.get("personList"); for (Person p : personList) getPersonService().save(p); // save to db //clear the list personList.clear(); return SUCCESS; } public String add() { //Add person List<Person> personList = (List<Person>) session.get("personList"); if (personList == null) { personList = new ArrayList<Person>(); session.put("personList", personList); } personList.add(person); return SUCCESS; }}现在,您已经通过映射到相应按钮的方法分离了逻辑。为了确保工作正常,请确保已打开DMI(动态方法调用)(默认情况下处于打开状态),并且将拦截器堆栈
defaultStack应用于操作配置(默认情况下已使用)。
struts.xml:
<?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.devMode" value="false"/> <package name="default" extends="struts-default"> <action name="person" > <result>/person.jsp</result> </action> </package></struts>
SessionAware是一个接口,您要使用Servlet会话将其放入对象时,应由您的操作或基本操作实现。在这里了解更多。
ActionContext是动作调用的容器占位符,在这里有更详细的说明。



