Date: 2005-01-19T10:47:43
   Editor: FrankZammetti
   Wiki: Apache Struts Wiki
   Page: StrutsSolutions
   URL: http://wiki.apache.org/struts/StrutsSolutions

   no comment

Change Log:

------------------------------------------------------------------------------
@@ -26,10 +26,14 @@
 
 4. Exposing Struts-based functions as Web Services
 
+5. Opening a response in a new window from a Struts Action
+
 == DISCUSSION OF PROBLEMS (What Is The Problem?) ==
 
 4. In an application I was architect and lead developer for last year, I was 
asked to expose certain pieces of functionality of the system as Web Services.  
This request was made AFTER the application was complete and deployed in 
production.  I did not want to spend a lot of time on this (in fact, COULDN'T) 
and wanted to change as little code as possible, ideally none.
 
+5. I've seen this question asked numerous times on the Struts User's mailing 
list, so I thought an entry somewhere on the Wiki might be a good idea.  The 
question is usually asked something like "How can I open a new window from an 
Action?"  It's a little vague, but it's along the lines of how can you submit a 
form and have the response appear in a new window.  Usually it's asked within 
the context of doing it variably, that is, sometimes returning in a new window, 
sometimes not.
+
 == DISCUSSION OF SOLUTIONS (What Is The Solution?) ==
 
 1.1.  You can distinguish between inline and attachment (with a filename) in 
the response content-disposition header.
@@ -132,5 +136,15 @@
 I don't claim this is THE way to do Web Services.  Far from it.  What I WILL 
claim though is that if you have an existing application and you want to expose 
parts of it as Web Services, this solution can give you a very easy way to do 
it, with some limitations of course...  First, it is Struts 1.1-only at the 
moment.  Second, the incoming request must be "flat", that is, no nested 
elements are allowed (aside from children of the root element).  Third, only 
strings are supported, so you lose the notion of true data typing that SOAP 
gives you.
 
 All these details, and plenty more, as well as full source, are available at 
the linked address above.  I welcome any suggestions anyone has.  Although I 
haven't done much on this in a while (because it met my needs as-is), I would 
love to continue this work if enough people find it useful.
+
+5. Simply put, there is no way to do this.  Opening a new window is a strictly 
client-side activity.  You have to "fake it".  There's two ways to do it...
+
+First, you could simply target your HTML form using the target="_blank" 
attribute.  This will result in whatever response the server sends back 
appearing in a new window.  The down-side to this is you have to know 
before-hand to do this.  If you want a variable solution, you have to get into 
scripting... You can set the target attribute's value via client-side scripting 
as appropiate before submitting the form.
+
+Second, you could have a check in all JSP's that looks for some flag in the 
request object.  When present, the JSP inserts an onLoad Javascript event 
handler that opens the new window and redirects to the URL where the content 
can be found.
+
+Another possibility if you are using frames is to target all form submissions 
to a hidden frame.  Include in all pages some Javascript that performs some 
checks and handles things accordingly... I use this in one system I wrote... 
The checks I'm speaking of are based on some flag value in the request object 
(just insert the value into a page-level Javascript variable)... The flag may 
direct the page to copy itself to the main display frame, or to a new window.  
The former is a very nice way to have a "Please Wait" screen while the server 
is processing.  The later is the same basic idea, but in a new window.  This 
also allows you to do some nice error handling things, such as simply hiding 
the Please Wait layer in the main frame to expose the page as it existed before 
the form was submitted.  Nice way to debuild a page without incurring any 
server time.  But now I'm getting off on a tangent :)
+
+The bottom-line here is this: There is no way to direct the browser to open 
the response in a new window from an Action.  You either have to indicate you 
want this behavior when the form is submitted, or make it happen with scripting 
once the response is back at the browser.  At least, this is true within the 
confines of plain old HTML... You could always pull an applet out and do 
something like this!
 
 = THE END =

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

Reply via email to