Basically it is better to reuse code via interceptors, not action base 
classes. You can have a look at JSONValidationInterceptor for an example 
how an interceptor can create a result.

In your case you could define an interface Exportable which actions have 
to implement and your interceptor can use it to get data from actions.


Regards,
Christoph


> 
> We are creating a base action to manage export function. This base 
> class deals with file name and content type. 
> public class public abstract class AbstractExportAction{ //Will be 
> override protected abstract InputStream exportInputStream() ; 
> @Action(value = "export", results = { @Result(name = "success", type
> = "stream", params = { "inputName", "inputStream", "contentType", "$
> {exportContentType}; charset=UTF-8", "Content-Disposition", 
> "attachment; filename=\"${filename}\"", "contentDisposition", 
> "attachment; filename=\"${filename}\"", "bufferSize", "2048" }) }) 
> public String export() throws ClientException {     inputStream = 
> exportInputStream(); LOG.debug("Exporting to {} file ", getFilename
> ());     return SUCCESS; }
> //setter getters for filename and exportContentType } 
> Now the other actions extend above class and return they own data as
> InputStream
> package action.account;
> public class AccountsSummary extends AbstractExportAction { 
> @Override protected InputStream exportInputStream() { } } 
> *We have /account/export.action without any need to deal with file 
> name and content *
> Generally every thing works fine, but in below case, the export 
> action will not map to correct class:
>    * Action A extends AbstractExportAction 
>    * Action B extends AbstractExportAction 
>    * Action A and B  are in same namespace (package) 
> In above case, struts ( struts convention plugin) randomly took one 
> action A or B and map export action to that class.
> Do you think we are using correct approach?!
>  
> ~Regards,
> ~~Alireza Fattahi

This Email was scanned by Sophos Anti Virus

Reply via email to