繁体   English   中英

Struts 2:动作类

[英]Struts 2: Action classes

所以,我有下一种情况:

我有一个带有表单的页面->此表单已提交到服务器->在服务器上,显示了特殊的struts 2操作,用于处理提交的表单->并在最后一步供用户再次使用表单显示此页面。

何时,我尝试测试此工作流程,我发现一个奇怪的时刻:

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

这是我的测试动作:

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将请求发送到my Action.remove方法。

接下来,用户将请求发送到my Action.add方法,但没有id参数。 -这种情况一定会失败! (例如-我忘记添加验证)。

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

所以,接下来我的一般问题是:

1.一种动作类别-一种方法-这是最佳实践吗?

2.如果在一项操作中使用了几种方法-我需要为清晰的修改字段添加一些服务方法吗? 或者在这种情况下我该怎么办?

谢谢!

获得动作类的单个实例的唯一方法是(a)您正在使用Spring,并且(b)您的动作被声明为默认(单个)作用域。 否则,在没有Spring或没有原型范围的情况下,您将始终根据每个请求获得一个新的动作实例。

1)视情况而定 我倾向于将紧密耦合的动作方法集中到一个动作类中,但是我不知道这是否是“最佳实践”,我认为这取决于情况和偏好。 我看不到有很多引人注目的技术优势。

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

2)如果要在多个请求中获得完全相同的动作实例,则几乎可以肯定您的配置是错误的-我会在做其他很多事情之前先解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM