Struts2约定插件@动作未与Spring Boot映射

问题描述 投票:1回答:2

升级我的应用程序以使用Spring Boot版本2.1.8.RELEASE + struts2-convention-plugin with Struts2-core版本2.5.20动作未正确映射,我得到了错误

com.opensymphony.xwork2.config.ConfigurationException:没有为名称空间[/]和与之关联的动作名称[home]映射的动作上下文路径[]。

如果我将struts.xml中的动作除名,它们将正常工作。

下面是我当前的配置,为什么它们不映射?

我尝试了许多不同的配置,但似乎没有任何效果,StrutsPrepareAndExecuteFilter正在触发但未找到任何动作,好像Spring尚未扫描它们。这可能是依赖版本问题吗?

application.yaml

  server:
    port: 8080
    servlet:
      context-path: /

Struts2.xml

    <struts>
        <constant name="struts.devMode" value="false" />
        <constant name="struts.convention.action.packages" value="com.myactions.action" />
        <constant name="struts.convention.action.includeJars" value=".*?/myjar.*?jar(!/)?,.*?/myjar*?jar(!/)?" />
        <constant name="struts.objectFactory" value="spring" />
        <constant name="struts.objectFactory.spring.autoWire" value="name" />
        <constant name="struts.multipart.maxSize" value="100000000" />
        <constant name="struts.convention.default.parent.package" value="struts-default"/>

    ## THIS WORKS
    <!--    <package name="home"  extends="struts-default">-->
    <!--        <action name="actionHome" class="com.myactions.action.HomeController" method="actionHome">-->
    <!--            <result name="success">home.jsp</result>-->
    <!--        </action>-->
    <!--    </package>-->

    </struts>

Controller

@Namespace("/")
public class HomeController extends BaseController {

    @Action("home")
    public String actionHome() throws Exception {           
        return SUCCESS;
    }   
}

Main

@SpringBootApplication
@ServletComponentScan
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder springApplicationBuilder) {
        return springApplicationBuilder.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Struts2筛选器

@WebFilter("/*")
public class Struts2Filter extends StrutsPrepareAndExecuteFilter {

}

UPDATE

Dependencies

java spring-boot struts2 struts2-convention-plugin
2个回答
0
投票
已通过spring2-convention-plugin,类PackageBasedActionConfigBuilder具有方法buildUrlSet,该方法将所有urls移到需要扫描Actions的类中,这将urls删除到我的类中,因此没有任何操作正在被扫描。

存在条件excludeParentClassLoader,需要将其设置为false

(第415行)


0
投票
经过几天的反复试验,下面是一些线索。

使用Struts.xml配置Struts 2.5.20的Spring Boot 2.1.8可以工作。您的projet POM至少需要以下依赖项:

© www.soinside.com 2019 - 2024. All rights reserved.