Re: Problem with download link in 'appendToResponse' [SOLVED]

Juergen Lorenz Simon <[email protected]> Fri, 27 Apr 2012 11:17:51 +0200
Newsgroups gmane.comp.web.webobjects.devel
Message-ID <[email protected]>
--===============0764288730==
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_F087C2A7-9745-416B-B605-D8197B36A2BC"


--Apple-Mail=_F087C2A7-9745-416B-B605-D8197B36A2BC
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1


Worked like a charm. Thanks!

On 26.04.2012, at 02:37, Alexis Tual wrote:

> Hi,
>=20
> 2012/4/26 Juergen Lorenz Simon <[email protected]>
> Hi,
>=20
> I'm trying to generate some file content on the fly and return it when =
the user clicks a link. I'm doing this in a D2W context, the component =
is a propoerty level component. I had some success by overwriting =
appendToResponse like so:
>=20
> public void appendToResponse(com.webobjects.appserver.WOResponse =
response, WOContext context)=20
> {
> if ( shouldDownloadFile )
> {
> String fileName =3D "generated.properties";
> String contentType =3D "text/ascii";
> response.setHeader( contentType + "; name=3D\"" + fileName + "\"", =
"Content-Type" );=20
> response.setHeader(=20
> "attachment; filename=3D\"" + fileName + "\"", "Content-Disposition");
> String content =3D this.configuration();
> response.setContent( content );
> 	}
> 	else
> 	{
> 	    super.appendToResponse( response, context );
> 	}
> }
>=20
> The flag 'shouldDownloadFile' is set to true when the link contained =
in the component is clicked (normal action binding).
>=20
> However, instead of only the generated content, I also get some other =
generated HTML in the file. Does somebody know what the problem is?
>=20
> Your action returns probably null, so the current page is rerendered =
after the action, this causes your appendToResponse to be called on each =
components of your page (except the one nested into your property level =
component), as a result you get a funky response :)
>=20
> For this kind of stuff, try to create a response in your action, for =
example :
>=20
>     ERXDownloadResponse dl =3D =
pageWithName(ERXDownloadResponse.class);
>     byte[] someData =3D this.configuration().getBytes();
>     dl.setInputStreamToDownload(new ByteArrayInputStream(someData), =
someData.length);
>     dl.setContentType("text/ascii")
>     dl.setDownloadFilename("generated.properties");
>     return dl;
> =20
> Alex


--Apple-Mail=_F087C2A7-9745-416B-B605-D8197B36A2BC
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=iso-8859-1

<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Worked like a charm. Thanks!</div><br><div><div>On 26.04.2012, at 02:37, Alexis Tual wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div class="gmail_extra">Hi,<br><br><div class="gmail_quote">2012/4/26 Juergen Lorenz Simon <span dir="ltr">&lt;<a href="mailto:[email protected]" target="_blank">[email protected]</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">Hi,<div><br></div><div>I'm trying to generate some file content on the fly and return it when the user clicks a link. I'm doing this in a D2W context, the component is a propoerty level component. I had some success by overwriting appendToResponse like so:</div>
<div><br></div><div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco"><span style="color:rgb(146,31,103)">public</span>&nbsp;<span style="color:rgb(146,31,103)">void</span>&nbsp;appendToResponse(com.webobjects.appserver.WOResponse response, WOContext context)&nbsp;</div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">{</div></div><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">if<span style="">&nbsp;(&nbsp;</span><font color="#0a30c8">shouldDownloadFile</font><span style="">&nbsp;)</span></div>
</div><div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">{</div></div></blockquote><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<span style="font-family:Monaco;font-size:11px">String fileName =&nbsp;</span><span style="font-family:Monaco;font-size:11px"><span style="color:rgb(59,63,251)">"generated.properties"</span></span><span style="font-family:Monaco;font-size:11px">;<br>
</span></blockquote><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<span style="font-family:Monaco;font-size:11px">String contentType =&nbsp;</span><span style="font-family:Monaco;font-size:11px"><span style="color:rgb(59,63,251)">"text/ascii"</span></span><span style="font-family:Monaco;font-size:11px">;<br>
</span></blockquote><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<span style="font-family:Monaco;font-size:11px">response.setHeader( contentType +&nbsp;</span><span style="font-family:Monaco;font-size:11px"><span style="color:rgb(59,63,251)">"; name=\""</span></span><span style="font-family:Monaco;font-size:11px">&nbsp;+ fileName +&nbsp;</span><span style="font-family:Monaco;font-size:11px"><span style="color:rgb(59,63,251)">"\""</span></span><span style="font-family:Monaco;font-size:11px">,&nbsp;</span><span style="font-family:Monaco;font-size:11px"><span style="color:rgb(59,63,251)">"Content-Type"</span></span><span style="font-family:Monaco;font-size:11px">&nbsp;);&nbsp;<br>
</span></blockquote><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<span style="font-family:Monaco;font-size:11px">response.setHeader(&nbsp;</span></blockquote><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
"attachment; filename=\""<span style="">&nbsp;+ fileName +&nbsp;</span>"\""<span style="">,&nbsp;</span>"Content-Disposition"<span style="">);<br></span></blockquote><blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<span style="font-family:Monaco;font-size:11px">String content =&nbsp;</span><span style="font-family:Monaco;font-size:11px"><span style="color:rgb(146,31,103)">this</span></span><span style="font-family:Monaco;font-size:11px">.configuration();</span></blockquote>
<blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:40px;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-width:initial;border-color:initial;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px">
<div><div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">response.setContent( content );</div></div></div></blockquote></blockquote><div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">
<span style="white-space:pre-wrap">	</span>}</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco"><span style="white-space:pre-wrap">	</span>else</div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco"><span style="white-space:pre-wrap">	</span>{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">
<span style="white-space:pre-wrap">	</span>&nbsp; &nbsp; super.appendToResponse( response, context );</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">
<span style="white-space:pre-wrap">	</span>}</div></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal Monaco">}</div><div><br></div><div>The flag 'shouldDownloadFile' is set to true when the link contained in the component is clicked (normal action binding).</div>
<div><br></div><div>However, instead of only the generated content, I also get some other generated HTML in the file. Does somebody know what the problem is?</div></div></blockquote><div><br>Your action returns probably null, so the current page is rerendered after the action, this causes your appendToResponse to be called on each components of your page (except the one nested into your property level component), as a result you get a funky response :)<br>
<br>For this kind of stuff, try to create a response in your action, for example :<br><br>&nbsp;&nbsp;&nbsp; ERXDownloadResponse dl = pageWithName(ERXDownloadResponse.class);<br>&nbsp;&nbsp;&nbsp; byte[] someData = this.configuration().getBytes();<br>
&nbsp;&nbsp;&nbsp; dl.setInputStreamToDownload(new ByteArrayInputStream(someData), someData.length);<br>&nbsp;&nbsp;&nbsp; dl.setContentType("text/ascii")<br>&nbsp; &nbsp; dl.setDownloadFilename("generated.properties");<br>&nbsp;&nbsp;&nbsp; return dl;<br>
&nbsp;<br>Alex<br></div></div></div>
</blockquote></div><br></body></html>
--Apple-Mail=_F087C2A7-9745-416B-B605-D8197B36A2BC--

--===============0764288730==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
WebObjects-dev mailing list
[email protected]
http://www.omnigroup.com/mailman/listinfo/webobjects-dev

--===============0764288730==--