struts2配置需要输入吗?

时间:2011-11-10 04:23:46

标签: validation struts2

在我的项目中,我在struts.xml

中有此配置
<action name="searchTracker" class="searchAction" method="searchTracker">
    <result name="success">/jsp/searchTracker.jsp</result>
    <result name="error">/jsp/searchTracker.jsp</result>
</action>

这是我在searchAction Action中的动作方法

public String searchTracker(){

this.clearErrorsAndMessages();

List<File> queryResults = fileManager.retrievequeryResults(patchNumBySearch); // patchNumBySearchis input from the page

if(queryResults == null){
    this.setTrackers(null);
    addActionError("This patch number doesn't exist. Please choose another one !");
    return ERROR;
}
    List<Tracker> trackers = commonUtils.convertToTrackers(queryResults);
    this.setTrackers(trackers);

}
    return SUCCESS;

}

如果我输入错误的参数并且queryResult返回为NULL,页面searchTracker.jsp可以按照我的意愿正确显示错误消息,但在此之后,我输入正确的参数,它直接在

下面显示错误
 "Errors on action com.harris.northstar.dbadesk.action.SearchTrackerAction@9bee3a, returning result name 'input'"

我只是比较了两种不同情况下的调试日志,发现只有一行差异

 "converter is null for property patchNumBySearch. Mapping size: 0"

如果该行存在,它将进入我的操作,如果不存在,它将转到错误请求输入结果。这是什么意思?

并没有进入动作类。我知道原因是它违反了一些默认的验证拦截器并抛出了这个异常,但我发现这个请求有正确的参数没有任何问题。如果我首先输入正确的参数,它可以获得queryResult并且无问题地转到Success结果。唯一不同的是时机。

我是否必须在配置xml中添加输入结果?我之前遇到过一些项目,他们只有成功和错误结果,根本没有输入结果,为什么它不起作用?我的struts.xml出了什么问题?

我不想通过禁用struts默认验证拦截器来创建我自己的拦截器

我刚刚找到了一种绕行的方法。只是删除配置文件中的错误结果,只保留成功结果,并删除方法searchAction中的AccionErrors,这样用户就不会收到任何关于查询请求的警告消息,只是在页面上没有显示任何内容,但这种方式是次要选项。我仍然希望通过解决此问题来显示错误消息。

1 个答案:

答案 0 :(得分:0)

在将控件转移到操作方法之前,如果发生验证错误,将调用input结果。在这种情况下,我建议您为初始jsp定义结果类型input,并尝试分别使用<s:fielderror /><s:actionerror />打印fielderrors和actionerros。这将为您提供更好的前景,您将了解如何在下一步中处理此问题,具体取决于错误类型。