【问题标题】:struts2 validation framework requires result inputstruts2 验证框架需要结果输入
【发布时间】:2011-11-07 05:01:35
【问题描述】:

在我使用 struts2 的项目中,我不使用验证框架,并且在我的 Action 类中没有任何操作方法返回“输入”。这是我的配置sn-p,

    <action name="searchTracker" class="searchAction" method="searchTracker">
        <result name="success">/jsp/searchTracker.jsp</result>
        <result name="error">/jsp/searchTracker.jsp</result>
        <result name="input">/jsp/searchTracker.jsp</result>
    </action>

这里是动作类

 public String searchTracker(){

    this.clearErrorsAndMessages();

    List<File> files = fileManager.retrieveFiles(patchNumBySearch);
    if(files == null){
        this.setTrackers(null);
        addActionError("This patch number doesn't exist. Please choose another one !");
        return ERROR;
    } else {
        if (files.size() == 0) {
            addActionError("This patch doesn't include any tracker. Please create tracker or choose another patch");
            return ERROR;
            }
        else {
            List<Tracker> trackers = commonUtils.convertToTrackers(files);
            this.setTrackers(trackers);
        }
    }
        return SUCCESS;
}

如果我删除输入结果,它会抛出异常,像这样

     "No result defined for action SearchTrackerAction and result input"

如果我检查后端日志,它会显示 “2011-11-07 00:09:13,841 调试

com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.debug:68 - Errors on action com.harris.northstar.dbadesk.action.SearchTrackerAction@1d07b41, returning result name 'input'"

为什么会调用 DefaultWorkflowInterceptor 并返回结果名称输入?

如果我在配置中放回输入结果,异常就消失了。但是如果Action首先出错,即使我设置断点也不会再次成功,之后它不会进入那个方法searchTracker()

【问题讨论】:

    标签: validation input struts


    【解决方案1】:

    这也可能是由类型转换错误引起的;如果不了解您发送的内容的更多信息,除此之外很难提供帮助。

    如果您删除“工作流”拦截器,S2 将停止检查操作中的错误。您可能还需要删除类型转换拦截器,但工作流应该足够了。如果您没有使用任何验证,您也可以删除该拦截器。

    【讨论】:

    • @user1006080 您需要定义自己的interceptor stack 并将其用作默认堆栈。我只是复制defaultStack 并尝试先删除“工作流程”。
    • 然后我必须将此拦截器堆栈添加到我的操作配置中 ?
    • @user1006080 您可以将其添加到特定操作,但要了解您的其余操作将使用默认堆栈以及您对其进行配置的操作将仅调用该操作配置中定义的拦截器/堆栈。我觉得你希望它只在一个操作时关闭有点奇怪。
    • @user1006080 回答为什么调用工作流拦截器:因为它在默认拦截器堆栈中,堆栈中的每个拦截器都按照它们列出的顺序被调用堆栈配置,除非拦截器“破坏链”并提前返回。请阅读一些 S2 文档以了解该框架的实际工作原理;它会让你的生活更轻松。
    • @user1006080 我不认为删除拦截器是一个好主意,但是如果你不想处理转换错误,我们你就无法弄清楚为什么 S2 认为它需要去回到输入结果,你没有太多选择。您可以配置输入结果名称,因此它也不需要“输入”结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多