我正在阅读 Struts2 文档,发现其文档中存在某种矛盾。在此链接中 https://struts.apache.org/docs/convention-plugin.html
约定插件允许操作类为操作定义不同的结果。 结果分为两类,全局和局部。全局结果在操作类中定义的所有操作之间共享。这些结果定义为操作类的批注。 本地结果仅适用于定义它们的操作方法
但是,在另一个链接 https://struts.apache.org/docs/result-annotation.html 中,建议
:@Result注释位于操作类级别,而不是方法级别。这与基于 XML 的操作配置中的内容匹配。不要试图注释你的行动的方法;它不会起作用。
那么哪一个是正确的呢?是否可以在方法级别定义@Result
?
本地结果使用@Action
属性配置为操作配置。换句话说,本地结果被配置在允许的位置。使用@Action
批注可以指定属性results
列表。您可以在此处添加@Result
注释。
Dave Newton的书"Apache Struts 2 Web Application Development"中有一段摘录:
我们还可以使用约定的注释来配置结果。我们不 必须依靠约定插件的想法,我们的结果是什么 JSP 文件应命名。 我们可以使用
@Result
注释,以及@Results
注释(如果需要多个) 结果。(我们只能在类中使用@Results
注释 级别,而@Action
和@Actions
注释可在 方法级别。我们可以在操作级别定义多个结果 通过@Action
注释的results
属性。
维基定义也正确
全局结果在操作类中定义的所有操作之间共享。这些结果定义为操作类的批注。 本地结果仅适用于定义它们的操作方法。下面是不同类型的结果注释的示例:
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; } }