Wes Wannemacher wrote:
> 
> 
> On Mon, 2008-03-10 at 14:59 -0700, Dave Newton wrote:
>> --- "Kelly.Graus" <[EMAIL PROTECTED]> wrote:
>> > Is it possible to specify more than one SUCCESS result for an action? 
>> For
>> > example, when the user runs an action, it could prompt them to download
>> a
>> > file (using the stream result type), and then redirect them to another
>> > page?
>> 
>> Names should be unique to a single result, otherwise there'd be no (easy)
>> way
>> to distinguish them. Depending on how you actually want the above
>> scenario to
>> work there are probably a few other options.
>> 
>> Dave
> 
> 
> Probably the most common practice would be to have your "success" result
> contain a meta-refresh that redirects to the action which will spit out
> your file (by stream result). If the file download requires some
> precondition to be met, then you'll probably have to set a flag in the
> user's session, since the meta-refresh will generate a whole new
> request. The advantage of this scenario is that your user will not end
> up looking at a blank page, or his/her previously filled out form (and
> potentially submitting more than once).
> 
> -Wes
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
Hi Wes,

I tried implementing this using a meta-refresh.  It kind of worked, but it
had some problems.  I'm simplifying the solution I came up with so I can
concentrate on getting the file downloading part working.  If you have any
hints on this, I would appreciate it.

Currently I have a jsp page that creates links to a DownloadLesson action,
and passes in a couple of parameters that describe what needs to be
downloaded.  The DownloadLesson action looks like this:


<action name="DownloadLesson"
class="net.toltech.lessondownloader.webapp.action.DownloadLessonAction">
        <result type="stream">
                application/octet-stream
                ${contentDisposition}
                ${contentLength}
        </result>
</action>       


Here are the important parts of the DownloadLessonAction:

public class DownloadLessonAction extends ActionSupport implements
                SessionAware, ServletContextAware {
        
        public String execute() {
                //Look up the lesson in the current download key.
                DownloadKey downloadKey = (DownloadKey)getSession().get( 
"downloadKey" );
                
                if( downloadKey != null ) {
                        //Get the lesson using the lesson identifier and 
version.
                        Lesson lesson = downloadKey.getLesson( 
getLessonIdentifier(), new
Version( getVersion() ) );
                        
                        if( lesson != null ) {
                                this.lesson = lesson;
                                
                                return SUCCESS;
                        }
                }
                
                return ERROR;
        }
        
        public java.io.InputStream getInputStream() {           
                if( lesson != null ) {
                        java.io.InputStream inputStream = 
servletContext.getResourceAsStream(
lesson.getFilePath() );
                        
                        try {
                                length = inputStream.available();
                        } catch( java.io.IOException e ) {}
                        
                        
                        return inputStream;
                }
                
                return null;
        }
        
        public String getContentDisposition() {         
                String filename = lesson.getFilePath().substring(
lesson.getFilePath().lastIndexOf( "/" ) + 1 );
                
                return "attachement;filename=" + filename;
        }
        
        public String getContentLength() {
                return new Integer( length ).toString();
        }


The above is kind of working.  I click on the download link, and the Save
dialog pops up, giving me the option to Open or Save the file.  As soon as I
select the Save button, 4 exceptions get thrown.  The first is
java.net.SocketException: Connection reset by peer: socket write error.  The
other 3 are java.net.SocketException: Software caused connection abort:
socket write error.

However, the file does get downloaded, so I'm wondering if I'm getting these
exceptions because I have debugging turned on.  So I guess my question is,
am I doing anything incorrect in how I'm accessing the file resource, and
how I'm returning the InputStream.

Once I figure out why I'm getting these exceptions, then I will go back to
trying to use the meta refresh to move to a different page.

Thanks!

Kelly
-- 
View this message in context: 
http://www.nabble.com/-S2--Multiple-SUCCESS-results--tp15959652p16012550.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to