我正在处理一个涉及Web层的Struts2和业务层的Spring的应用程序。 我还有BusinessException类,所有业务服务都会使用它来创建业务相关的验证失败,这些失败必须转到Web层,并且应该作为验证消息显示给用户。 我可以通过编写Action类来轻松完成此任务:
ClientAction extends ActionSupport throws Exception{
....
try{
clientService.searchClient();
}catch(InvalidClientSearchCriteriaException e){
addActionMessage("Invlid Search Criteria");
}
...
每个动作类中的类似代码。但是我不想用try catch块来污染我的动作类。相反,如果我可以在一个地方写try catch块并在那里捕获所有异常作为BusinessExceptions并在这些异常中从嵌入消息/错误中创建消息/错误,那将会好得多。 我能想到的一种方法是使用拦截器或preresult监听器。 但我不能使用下面的拦截器来捕获从动作类抛出的BusinessExceptions ...
ExceptionInterceptor extends AbstractInterceptor(ActionInvocation ivocation,...){
try{
invocation.invoke();
}catch(Exception e){
if(e instanceof BusinessException){
ActionSupport as = (ActionSupport)invocation.getAction();
String message = extractMessagefromException()//--custom method to extract message embedded in exception.
as.addActionMessages(message);
//-- above will not work result has already been rendered right? and hence it wouldn't matter if i add action messages now.
}
}
}
使用pre-result listener的第二种方法是在pre-result listener的方法中添加与上面类似的动作消息,因为结果尚未呈现,我可以安全地更改它。但是,如果异常被抛出,我不确定预结果监听器是否会执行?即使它确实如此,我如何才能获得动作抛出的异常对象?
请告诉我任何其他方法,我不需要使用try-catch块来混乱我的课程