2010-08-11 55 views
3

我正在使用Struts 1.1的旧Web应用程序。为了进行业务验证(涉及多个表单属性和调用后端服务的复杂验证),我编写了一个ActionForm实现,在ActionForm.validate方法上调用一系列验证器。在Struts中处理异常1 ActionForm

验证器链使用commons链实现。一切都很好,除非在ActionForm.validate中发生异常时,它不会被struts异常处理程序捕获,而是会在屏幕上显示堆栈跟踪。 struts异常处理程序不能捕捉到

有没有办法避免页面上的堆栈跟踪并将异常传播到struts异常处理程序?

谢谢

回答

1

也许最好验证器不会抛出异常。验证是检查用户输入是否违反像minChars,maxChars,密码强度/验证,电子邮件语法正确性,isNumber等等的限制。如果验证程序失败,它应该只返回false - 从不抛出异常。请参阅http://struts.apache.org/1.2.4/userGuide/dev_validator.html

上的示例如果您的验证程序调用后端函数......有错误 - 我认为。验证器应该只添加字段错误。

如果由于语法正确的输入而导致错误(例如,登录名的用户名/密码错误),那么您的struts应用程序(您的操作)应该处理此操作并将操作错误返回给用户。这可以通过在抛出异常时重定向到错误页面(UserNotLoggedInException)来完成。

+0

我不想用业务验证来污染Action方法。这就是从验证链中调用的原因。异常不被Struts异常处理程序捕获,但它们被web.xml中设置的错误页面捕获。感谢你的回答。 – 2011-07-22 16:29:37