保留Struts 2中多个JSP和Actions之间的值
我的struts项目结构如下: page1
– > action1
– > page2
– > action2
– > page3
我需要的是我在第1页的输入标签中输入的值,以便在action2中访问。
这是我的代码:
第1页:
Enter id:
动作1:
public class AddId extends ActionSupport { private int txtid; //getter and setter @Override public String execute() throws Exception { return "success"; }
}
第2页:
Your id entered is:
First name: Last name: Age:
动作2:
public class AddForm extends ActionSupport { private String txtfname; private String txtlname; private int txtage; private int txtid; //getters and setters @Override public String execute() throws Exception { return "success"; }
}
并显示所有内容
第3页:
ID:
first name:
last name:
age:
这是我遇到问题的地方,因为txtid
显示为null
,从中我推断该值不会从page2
传递给action2
我想出的解决方案就是使用
在我的第2页的表单中,这将允许我在action2
使用txtid
的值作为txtid2
,但这似乎更像是一个hack而不是实际的解决方案,所以任何其他建议都是受欢迎的。
在您希望将字段值从一个操作传递到另一个操作的情况下,您可以配置该字段的范围。 只需在每个操作中使用getter和setter放置相同的字段,在您的情况下,它将是action1
和action2
。 字段名称为txtid
。 除了defaultStack
中不包含scope
拦截器之外,您还应该在操作配置中引用它。 例如
/jsp/page2.jsp mykey txtid true /jsp/page3.jsp mykey txtid true
现在你的范围包含密钥mykey
和字段txtid
。 在每个操作中为字段提供访问者将使传输字段值从一个操作到另一个操作。 在上面的例子中使用了basicStack
,它是拦截器堆栈的骨架,它不包括一些包括validation
拦截器的拦截器。 如果您需要为操作提供其他function,则应在操作配置中构建自定义堆栈或引用其他拦截器。