6

我正在阅读 Struts2 文档,发现其文档中存在某种矛盾。在这个链接https://struts.apache.org/docs/convention-plugin.html

Convention 插件允许动作类为动作定义不同的结果。结果分为两类,全球和本地。全局结果在动作类中定义的所有动作之间共享。这些结果被定义为动作类的注释。本地结果仅适用于定义它们的操作方法

但是,在另一个链接https://struts.apache.org/docs/result-annotation.html中,建议:

@Result 注释位于 Action 类级别而不是方法级别。这与在基于 XML 的操作配置中找到的内容相匹配。不要试图注释你的 Action 的方法;不起作用。

那么哪一个是正确的呢?可以@Result在方法级别定义吗?

4

1 回答 1

4

@Action使用属性将本地结果配置为操作配置。换句话说,本地结果是在允许的地方配置的。使用@Action注释可以指定属性results列表。您可以在此处添加@Result注释。

Dave Newton 的书“Apache Struts 2 Web Application Development”有一段摘录:

我们还可以使用 Convention 的注释来配置结果。我们不必依赖 Convention 插件对我们的结果 JSP 文件应该命名的想法。@Result我们可以使用注释手动定义结果 ,@Results如果我们需要多个结果,可以使用注释。(我们@Results 只能在类级别使用注解,而@Actionand@Actions注解在方法级别可用。我们可以通过注解的属性在动作级别定义多个结果@Actionresults。 )

维基定义也正确

全局结果在动作类中定义的所有动作之间共享。这些结果被定义为动作类的注释。本地结果仅适用于定义它们的操作方法。以下是不同类型的结果注释的示例:

com.example.actions.HelloWorld

package com.example.actions;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

@Results({
  @Result(name="failure", location="fail.jsp")
})
public class HelloWorld extends ActionSupport {
  @Action(value="/different/url",
    results={@Result(name="success", location="http://struts.apache.org", type="redirect")}
  )
  public String execute() {
    return SUCCESS;
  }

  @Action("/another/url")

  public String doSomething() {
    return SUCCESS;
  }
}
于 2016-01-20T09:11:19.493 回答