首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用约定插件会破坏xml映射

启用约定插件会破坏xml映射
EN

Stack Overflow用户
提问于 2014-09-12 09:50:32
回答 1查看 198关注 0票数 1

我有一个旧项目,它使用xml配置的struts2映射。我想让它变得更新鲜一些,并使用注释映射,就像在spring中那样。所以我发现,struts2允许这样做。但在我加入之后

代码语言:javascript
复制
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-convention-plugin</artifactId>
        <version>${org.apache.struts.version}</version>
    </dependency>

到我的pom xml。我的xml配置停止工作。

以下是我在我的struts.xml中拥有的内容:

代码语言:javascript
复制
    <action name="my/home" class="my.dhblah.MyAction">
        <result type="redirectAction">my/home/search</result>
    </action>

我从maven pom中删除了插件。我调试了struts,在DefaultActionInvocation.createResult()在线proxy.getConfig()中看到了以下内容:

代码语言:javascript
复制
result = {com.opensymphony.xwork2.config.entities.ActionConfig@10444}"{ActionConfig my/home (my.dhblah.MyAction) - null}"
interceptors = {java.util.Collections$UnmodifiableRandomAccessList@10447} size = 20
params = {java.util.Collections$UnmodifiableMap@10448} size = 0
results = {java.util.Collections$UnmodifiableMap@10449} size = 2
exceptionMappings = {java.util.Collections$UnmodifiableRandomAccessList@10450} size = 1
className = {java.lang.String@10451}"my.dhblah.MyAction"
methodName = null
packageName = {java.lang.String@10452}"my"
name = {java.lang.String@10453}"my/home"
allowedMethods = {java.util.Collections$UnmodifiableSet@10454} size = 1
location = null

当我展开"results"部分时,我看到两个结果映射"success""exception"

pom.xml中启用插件之后,我会在同一行中看到以下内容:

代码语言:javascript
复制
config = {com.opensymphony.xwork2.config.entities.ActionConfig@10457}"{ActionConfig home (my.dhblah.MyAction.execute()) - null}"
interceptors = {java.util.Collections$UnmodifiableRandomAccessList@10460} size = 18
params = {java.util.Collections$UnmodifiableMap@10461} size = 0
results = {java.util.Collections$UnmodifiableMap@10462} size = 0
exceptionMappings = {java.util.Collections$UnmodifiableRandomAccessList@10463} size = 0
className = {java.lang.String@10464}"my.dhblah.MyAction"
methodName = {java.lang.String@10395}"execute"
packageName = {java.lang.String@10465}"my.dhblah#convention-default#/my"
name = {java.lang.String@10466}"home"
allowedMethods = {java.util.Collections$UnmodifiableSet@10467} size = 1
location = null

在我点击那个url之后,我有以下错误:

代码语言:javascript
复制
Struts Problem Report

Struts has detected an unhandled exception:

Messages:   
No result defined for action my.dhblah.MyAction and result success
Stacktraces

No result defined for action my.dhblah.MyAction and result success
    com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)

我没有将@Action注释添加到MyAction中,但似乎惯例插件在查看MyAction配置之前会选择旧的Action类并构建映射配置,这就是为什么我在"success"结果上没有映射任何东西的原因。

有人有这个问题吗?如何解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-12 10:49:07

这些都是不同的行动吐露。但是,当您通过Struts配置映射您的操作时,用于检索动作映射的逻辑将由动作映射器实现和执行。默认情况下使用的是动作映射器的默认实现。您应该知道,约定插件将其配置附加到xml配置中。因此,您可能在运行时配置了重复操作。很难预测动作映射器将提取哪些配置元素来构建动作映射。要解决这类配置问题,可以使用配置浏览器插件

Config浏览器是一个简单的工具,可以帮助在运行时查看Struts配置。在调试可能与配置问题相关的问题时,它非常有用。

要安装插件,只需将其添加到依赖项中即可。

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-config-browser-plugin</artifactId>
    <version>${org.apache.struts.version}</version>
</dependency>

这个插件可以通过将插件jar复制到应用程序的/WEB-INF/lib目录来安装。

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

https://stackoverflow.com/questions/25805470

复制
相关文章

相似问题

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