升级我的应用程序以使用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
spring2-convention-plugin
,类PackageBasedActionConfigBuilder
具有方法buildUrlSet
,该方法将所有urls
移到需要扫描Actions
的类中,这将urls
删除到我的类中,因此没有任何操作正在被扫描。存在条件excludeParentClassLoader
,需要将其设置为false
(第415行)
使用Struts.xml配置Struts 2.5.20的Spring Boot 2.1.8可以工作。您的projet POM至少需要以下依赖项: