【发布时间】:2012-01-30 12:28:44
【问题描述】:
所以,我有下一个情况:
我有一个带有表单的页面 -> 这个表单提交到服务器 -> 在服务器上,呈现特殊的 struts 2 Action 来处理提交的表单 -> 并在最后一步让用户再次显示这个带有表单的页面。
当我尝试测试这个工作流程时,我发现一个奇怪的时刻:
当我第一次打开页面时 - 表单字段 - 为空,但在服务器上提交表单并重新加载页面后 - 字段 - 不为空! Fields 包含我在前面的步骤中填写的数据。
这是我的测试操作:
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
private List<Integer> books;
private String title;
private String description;
public List<Integer> getBooks() {
return this.books;
}
public void setBooks(List<Integer> books) {
this.books = books;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
private static final long serialVersionUID = 1L;
public String show() {
// filling books variable
List<Integer> l = new ArrayList<Integer>();
l.add(1);
l.add(2);
l.add(3);
this.books = l;
return Action.SUCCESS;
}
public String save() {
// processing title and description variables here!
return show();
}
}
我的测试jsp文件:
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
<s:property value="books" />
<s:form action="saveAction">
<s:textfield id="title" label="Title" name="title" />
<s:textfield id="description" label="Description"
name="description" />
<s:submit />
</s:form>
</body>
</html>
我的 struts.xml 的这一小部分带有操作标签:
<action name="showAction" class="action.TestAction" method="show">
<result>pages/test.jsp</result>
</action>
<action name="saveAction" class="action.TestAction" method ="save">
<result>pages/test.jsp</result>
</action>
所以,我开始调查这个问题,以及我的结果:
Action 类只实例化一次,并且在所有用户请求都使用此 Action 类实例。
所以,如果在我的 Action 类中我的操作方法很少 - 所有这些方法都可以访问所有字段。
这是个好主意?
例如:用户使用一些id 向我的Action.remove 方法发送请求。
接下来,用户向我的Action.add 方法发送请求,但没有id 参数。 ——这种情况一定要失败! (例如 - 我忘记添加验证)。
但是 - 没有错 - 动作实例包含字段 id 的值。
那么,接下来是我的一般性问题:
1.一个动作类 - 一种方法 - 这是最佳实践吗?
2。如果在一个操作中使用了几种方法 - 我需要为清除修改的字段添加一些服务方法?或者在这种情况下我必须做什么?
谢谢!
【问题讨论】: