[
https://issues.apache.org/jira/browse/WW-4234?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lukasz Lenart closed WW-4234.
-----------------------------
Resolution: Not A Problem
Assignee: Lukasz Lenart
> Ability to catch service layer exceptions at one place and allow adding
> action messages/errors before results are rendered
> --------------------------------------------------------------------------------------------------------------------------
>
> Key: WW-4234
> URL: https://issues.apache.org/jira/browse/WW-4234
> Project: Struts 2
> Issue Type: Improvement
> Affects Versions: 2.3.15.3
> Reporter: Shailesh Arvind Vaishampayan
> Assignee: Lukasz Lenart
> Priority: Minor
> Fix For: 2.3.x
>
>
> I am working with an application involoving Struts2 in web layer and Spring
> in business layer. I also have BusinessException class which will be used by
> all business services to create business related validation failures which
> must go up to web layer and should be show to users as validation message. I
> can easily do this by writing in my Action class:
> {code:java}
> ClientAction extends ActionSupport throws Exception{
> ....
> try{
> clientService.searchClient();
> }catch(InvalidClientSearchCriteriaException e){
> addActionMessage("Invlid Search Criteria");
> }
> ...
> {code}
> And similar code in every action class. However i dont want to pollute my
> action classes with try catch blocks. Instead it would be much better if i
> can write on try catch block at one place and catch all the exceptions there
> as BusinessExceptions and create messages /errors from embedded
> messages/errors in those exceptions. One approach i could think of was to use
> interceptor or preResultListener. But I cannot use interceptor like below
> which catches business exceptions thrown from action classes...
> {code:java}
> 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 actoinmessages now.
> }
> }
> }
> {code}
> Second approach of of preResultListener is to add action messages just like
> above in preResultListener's method as result is yet to be rendered and i can
> safely change that. However not sure if preResultListener will ever execute
> if exception is thrown in action? and even if it does how i can get the
> exception object thrown by the action.?
> There has to be something out of the box so that actions are not cluttered
> with try-catch blocks
--
This message was sent by Atlassian JIRA
(v6.1#6144)