首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除convention.annotation -替换为struts.xml中的配置

删除convention.annotation -替换为struts.xml中的配置
EN

Stack Overflow用户
提问于 2013-01-29 22:57:47
回答 1查看 691关注 0票数 1

从操作中删除@Action@Result约定插件注释并将其替换为struts.xml中的等效配置时,我遇到了一个问题。

代码语言:javascript
复制
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

当我删除注释时,我得到“没有为action定义结果……”struts.xml错误,尽管在struts中有一个'capture all‘的结果--整个struts如下:

代码语言:javascript
复制
<?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正在被读取,因为如果我删除了动作映射"cars“,那么自动补全将被禁用(但这需要我试图删除的注释来验证它)。

我知道“没有定义结果”是一个简单的错误,通常是由拼写/大写错误引起的,但这里绝对不是这样的,它似乎只是忽略了整个"home“操作映射。

当单步执行DefaultActionInvocation.createResult时,根本没有“结果”可供它尝试匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 23:33:17

目前,cars操作声明是无效的(它也没有任何意义,IMO):

代码语言:javascript
复制
<action name="cars" class="baseCarsAction">
  <result name="input" type="json">
    <param name="root">autoResults</param>
    <param name="location">/jsp/home.jsp</param>
  </result>
</action>

也就是说:如果它是一个JSON结果,那么JSP是没有帮助的,它会被忽略(或者直接被拒绝,我不确定这是不是一个错误)。单个结果将是JSON或HTML。

将日志记录调到DEBUG级别,以捕获启动错误,从而缩小可能原因的范围。

如果在Spring配置文件中配置了baseAction (如果使用Spring注解进行注入,则不需要配置),则home操作的配置是有效的。

如果你并不实际使用约定插件,我会对它的部署保持警惕:它会改变操作的映射方式;它可能会对周围的应用程序产生影响并导致问题。坚持一种或另一种,避免两者兼而有之--这使得对应用程序行为的来源进行推理变得更加困难。

无关,但我建议将JSP页面放在/WEB-INF下,以禁止客户端直接访问。

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

https://stackoverflow.com/questions/14585812

复制
相关文章

相似问题

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