我在从操作中删除@Action
和@Result
约定插件注释并将其替换为struts.xml
.
package com.microed.cars.web;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
public class HomeAction extends ActionSupport {
@Action(results = {
@Result(location = "/jsp/home.jsp")
})
@Override
public String execute() throws Exception {
return super.execute();
}
}
当这些注释存在时,我可以成功访问localhost:port/context/home.action
当我删除注释时,我得到“没有为操作定义结果.....”struts 错误,尽管 struts.xml 中有一个“全部捕获”结果 - 整个 struts.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.convention.package.locators" value="web"/>
<constant name="struts.convention.default.parent.package" value="beetroot"/>
<package name="beetroot" extends="json-default">
<action name="home" class="homeAction">
<result>/jsp/home.jsp</result>
</action>
<action name="cars" class="baseCarsAction">
<result name="input" type="json">
<param name="root">autoResults</param>
/jsp/home.jsp
</result>
</action>
</package>
</struts>
它扩展了 json-default 因为我需要 json 结果类型来实现自动完成功能。
我不知道为什么它没有为homeAction
班级选择动作映射。我知道struts.xml
正在阅读,因为如果我删除动作映射“汽车”,那么自动完成功能将被禁用(但这需要我试图删除的注释以验证这一点)。
我知道“未定义结果”是一个简单的错误,通常是由拼写/大写错误引起的,但这里绝对不是这种情况,它似乎只是忽略了整个“家庭”动作映射。
单步执行时DefaultActionInvocation.createResult
,根本没有“结果”可供它尝试匹配。