是否可以在 Struts2 中通过仅使用注释的约定插件使用通配符方法调用?

发布于 2024-11-07 13:02:12 字数 61 浏览 1 评论 0原文

我知道如何在 struts.xml 中使用通配符方法调用,但是可以使用注释来做到这一点吗?如果是这样怎么办?

I know how to use wildcard method invocation within struts.xml, but is it possible to do this with annotations? If so how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小红帽 2024-11-14 13:02:12

您现在可能已经解决了这个问题,但对于那些寻找答案的人来说,是的,这是可能的。

对于通配符映射,请参考:http://struts.apache.org/ 2.3.1.2/docs/wildcard-mappings.html

要从 url 读取参数,请用以下注释您的方法:

private String id;

@Action(value = "edit/{id}",
        results={@Result(name = "success", location = "/WEB-INF/views/devices/edit.ftl")}
)        
public String edit() {  
    // do something
    return SUCCESS;
}

public void setId(String id) {
    this.id = id;
}

public String getId() {
    return id;
}
  • 您将需要 id 参数的 getter/setter。
  • 您需要指定结果,因为 struts2 不知道使用什么才能使 url: ...edit/123 成功,因此需要使用 @Result 指向您的文件。有点违背了约定插件的目的。

如果我想重定向到特定的 url,请使用此注释:

@Action(value = "index",
        results={@Result(name = "success", location = "/devices/edit/${entityId}", type = "redirect")}
    )

您需要实体 ID 的 getter/setter(在我的例子中为字符串)。

您还可以拥有高级通配符映射、命名空间通配符映射...

不要忘记更改 struts.xml 并添加以下常量。

<!-- Used for advanced wilcard mapping -->
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />

You probably have it resolved by now, but for those looking for an answer, yes it is possible.

For wildcard mapping, refer to: http://struts.apache.org/2.3.1.2/docs/wildcard-mappings.html

To read params from the url, annotate your method with this:

private String id;

@Action(value = "edit/{id}",
        results={@Result(name = "success", location = "/WEB-INF/views/devices/edit.ftl")}
)        
public String edit() {  
    // do something
    return SUCCESS;
}

public void setId(String id) {
    this.id = id;
}

public String getId() {
    return id;
}
  • You will need a getter/setter for the id parameter.
  • You need to specify the results since struts2 won't know what to use for success for the url: ...edit/123, hence the need to use @Result to point to your file. Kinda defits the purpose of the convention plugin there.

In the case I want to redirect to a specific url, use this annotation:

@Action(value = "index",
        results={@Result(name = "success", location = "/devices/edit/${entityId}", type = "redirect")}
    )

You would need a getter/setter for the entityId (String in my case).

You can also have advanced wilcard mapping, namespace wildcard mapping ...

Don't forget to change the struts.xml and add the following constants.

<!-- Used for advanced wilcard mapping -->
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文