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