首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Struts 2:操作类

Struts 2:操作类
EN

Stack Overflow用户
提问于 2012-01-30 12:28:44
回答 1查看 3.7K关注 0票数 1

所以,我有下一个情况:

我有一个带有表单->的页面--此表单提交给服务器上的->,呈现特殊的struts 2操作,用于处理提交的表单->,在最后一步,用户可以用表单再次显示此页面。

当我尝试测试这个工作流时,我发现了一个奇怪的时刻:

当我第一次打开页面-表单字段-空,但提交后在服务器上和重新加载页面-字段-不是空!字段包含数据,我在前面的步骤中填写了这些数据。

在这里,我的测试行动:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
<%@ 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:

代码语言:javascript
复制
    <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类中,我有几个操作方法--所有这些方法都可以访问所有字段。

这是个好主意?

例如:用户使用一些Action.remove向my id方法发送请求。

接下来,用户向my Action.add方法发送请求,但不包含id参数。-这种情况必须失败!(例如,我忘了添加验证)。

但是-没有任何错误-操作实例包含字段id的值。

因此,我接下来的一般性问题是:

1.一个操作类--一个方法--它是最佳实践?

2.如果在一次操作中使用了几种方法--我需要添加一些用于清除修改字段的服务方法?或者在这种情况下我必须做什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-30 13:00:37

获得操作类的单个实例的唯一方法是:(a)您正在使用Spring,以及(b)您的操作被声明为默认(单例)范围。否则,如果没有Spring或原型作用域,那么每次请求都会得到一个新的操作实例。

1)这取决于。我倾向于将紧密耦合的动作方法合并到一个单独的动作类中,但我不知道这是否是一个“最佳实践”--我认为这取决于情况和偏好。我看不出一个比另一个更有说服力的技术好处。

对我来说,这是一个可读性和功能性的问题。

2)如果您在多个请求上得到完全相同的操作实例,那么您的配置几乎肯定是错误的--我会在做其他事情之前修复它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9063866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档