【发布时间】:2011-11-10 04:23:45
【问题描述】:
在我的项目中,我在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,因此用户不会收到任何有关其查询请求的警告消息,只是在页面上不显示任何内容,但这种方式是次要选项。我仍然想通过解决这个问题来显示错误消息。
【问题讨论】:
-
我已经解释过这也可能来自类型转换错误。我们不知道您在输入什么,我们不知道您在提交什么。您所能做的就是使用该框架来帮助您进行诊断。
-
如果是类型转换错误,为什么我一开始输入正确的参数没有发生,只有输入错误的参数后输入正确的参数才会发生?
-
您提供的信息无法回答这个问题。
-
你是对的,当我提交正确的参数而不是先提交时,我只是用更详细的日志更新问题。
-
如果没有您所采取的步骤的确切顺序、所涉及的操作和映射、您输入的数据以及操作属性声明,则无法提供帮助。
标签: validation struts2