struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adam Hardy <ahardy.str...@cyberspaceroad.com>
Subject Re: usage of Preparable interface?
Date Thu, 01 May 2008 14:22:13 GMT
Jeromy Evans on 01/05/08 14:49, wrote:
>>>> That way you could remove all the boilerplate from your actions.
>>>>
>>>> eg, If it placed the model into the actioncontext you could 
>>>> potentially use
>>>> <s:select name="state" list="#states"/>
>>>> without your action providing the list or getter at all (except 
>>>> something must instruct the interceptor to load it).
>>>> Just some ideas.
>>>
>>> I thought about putting it all in the interceptor but I think it 
>>> could get unwieldy once the application grows.
>>>
>>> Plus, there may be logic in the list call to restrict the list in 
>>> some way. I guess you could do that in an interceptor by casting your 
>>> action to what you know it is and then calling the required methods 
>>> on your model.
>>>
>>> My boiler plate code isn't so bad, and in fact the only boiler plate 
>>> stuff is the catch block.
>>>
>>> By the way, how would you figure out what the method being called is? 
>>> Hard-code a call to fetch anything prefixed "method:" from the HTTP 
>>> params? Or is there something on the Struts API already?
>>
>> Is there an easier way?
>>
>> String method = 
>> ServletActionContext.getActionContext(request).getActionInvocation().getProxy().getMethod();

>>
>>
> That's the right place.  It's available as an argument in the 
> intercetpor.  PrepareInterceptor is doing exactly that when it looks for 
> the presence of the Preparable interface on your action, and then for a 
> methods matching the prepare<methodName>() signature.

In that case, I shall ditch PrepareInterceptor and code another, along with an 
interface for the action to implements:

interface DropdownListHelper {
     prepareDropdowns(String methodName);
}

I'll pull the error handling into the interceptor as well, and then all I need 
in the Action.prepareDropdowns() is a couple of if switchblocks to call the 
right managers:

public void prepareDropdowns(String methodName)
{
     if (methodName.equals("read")
         || (methodName.equals("save") && hasErrors()))
     {
         getRequest().setAttribute(
             WildlifeJstlConstants.DROPDOWN_SPECIES_HABITAT.toString(),
             habitatManager.search(0, 0));
     }
}

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message