thanks, UPBrandon
I tried your code, for csv,
public class CsvRequestTarget extends ByteDataRequestTarget {
public CsvRequestTarget(byte[] data, String fileName) {
super("text/plain", data, fileName+".csv");
}
}
but it can not work with IE and ff.
Could you tell me your code about csv ?
thanks a lot
UPBrandon wrote:
>
> For a while, we were using a solution that allowed us to download
> generated PDF's but it only seemed to work in IE and some people had
> trouble using it from "outside connections."
>
> What I wanted was a way to access dynamic/generated content that:
> - Doesn't cause Wicket to be come non-responsive after the request
> - Works in at least IE and FF
> - Allows a file name to be provided
> - Allows a mime type to be provided
>
> After taking another stab at it, I was able to get that working. Here is
> what I ended up with:
>
> public class ByteDataRequestTarget extends ByteArrayResource implements
> IRequestTarget {
> private String fileName;
>
> public ByteDataRequestTarget(String mimeType, byte[] data, String
> fileName) {
> super(mimeType, data, fileName);
> this.fileName = fileName;
> }
>
> public void detach(RequestCycle requestCycle) { }
>
> public void respond(RequestCycle requestCycle) {
> requestCycle.setRequestTarget(new
> ResourceStreamRequestTarget(this.getResourceStream() ) {
> public String getFileName() {
> return fileName;
> }
> } );
> }
> }
>
> And then I subclassed for different common file types like PDF and CSV.
> Those subclasses basically just provide the MIME type for the user and
> automatically add the file extension.
>
> public class PdfRequestTarget extends ByteDataRequestTarget {
> public PdfRequestTarget(byte[] data, String fileName) {
> super(Constants.PDF_MIME_TYPE, data, fileName+".pdf");
> }
> }
>
> To use the class, you do something like this:
>
> new Button(buttonId, new Model("My Button") ) {
> public void onSubmit() {
> getRequestCycle().setRequestTarget(new
> PdfRequestTarget(getSomePdfData(), "FileName") );
> }
> };
>
> I hope that helps.
>
>
> wch2001 wrote:
>>
>> UPBrandon,
>> Did u find any solution for it?
>>
>> anyone can help?
>>
>> thanks
>>
>>
>> UPBrandon wrote:
>>>
>>> It's not that I necessary want to see the page refreshed with updated
>>> form values. In fact, I would prefer that the user not leave the page
>>> at all. All the form contains is a checkgroup of "things" to include in
>>> the PDF. All I want to do when the button is pressed is view/download
>>> the PDF but the form with the checkgroup needs to be submitted first so
>>> I can see what was checked when I generate the PDF.
>>>
>>> I suppose taking the ResourceReference's and using it in the onload
>>> would work but it seems like such a hack, not to mention that it might
>>> cause problems if the user uses the back button. While working on my
>>> DynamicWebResource, I was able to download a PDF and continue using my
>>> application using a link (assigned to either a link or button in HTML.)
>>> The only problem is that it doesn't do a submit. Accessing the
>>> DynamicWebResource from a button works but makes my app non-responsive.
>>> What I would like to do is either make the ResourceLink somehow submit
>>> my form or, even better, make a button component that handles the
>>> request in a way that doens't break Wicket. Ideas/suggestions?
>>>
>>> -Brandon
>>>
>>>
>>> igor.vaynberg wrote:
>>>>
>>>> so you want to see the page with updated form values _and_ stream the
>>>> pdf?
>>>>
>>>> why dont you take that url you generated for your resourceref and
>>>> append it to a window.onload javascript that does window.location=url;
>>>>
>>>> -gior
>>>>
>>>>>
>>>>> As I mentioned in my previous response, I couldn't use
>>>>> getRequestCycle().setRequestTarget() directly because of the way the
>>>>> API
>>>>> works (you can use a ResourceReference but not a Resource.) Instead,
>>>>> I
>>>>> ended up with something like this:
>>>>>
>>>>> new AjaxButton(buttonId, form) {
>>>>> protected void onSubmit(AjaxRequestTarget target, Form form) {
>>>>> ResourceReference pdfReference = new
>>>>> ResourceReference("") {
>>>>> protected Resource newResource() {
>>>>> return new BillPdfWebResource(...);
>>>>> }
>>>>> };
>>>>> String url =
>>>>> getRequestCycle().get().urlFor(pdfReference).toString();
>>>>> getRequestCycle().setRequestTarget(new
>>>>> RedirectRequestTarget(url) );
>>>>> }
>>>>> }
>>>>>
>>>>> It works... but only once. When I click on the button, everything
>>>>> works, my
>>>>> PDF gets generated and downloaded but then my app becomes
>>>>> unresponsive. I
>>>>> can't interact with the site at all until I "start over." Is there a
>>>>> better
>>>>> way to go about this that wouldn't cause that side effect? Whatever
>>>>> approach I take, I need to be able to submit a form when the PDF is
>>>>> generated. My example doesn't show it but my BillPdfWebResource
>>>>> class
>>>>> generates a PDF based on the user's selection and my Form's Model
>>>>> needs to
>>>>> be updated. Any suggestions?
>>>>>
>>>>> -Brandon
>>>>>
>>>>> igor.vaynberg wrote:
>>>>> >
>>>>> > onsubmit() {
>>>>> > getrequestcycle().setrequesttarget(new
>>>>> > redirectrequesttarget(urlfor(resourceref)));
>>>>> > }
>>>>> >
>>>>> > -igor
>>>>> >
>>>>> > On Feb 13, 2008 8:18 AM, UPBrandon <[email protected]> wrote:
>>>>> >>
>>>>> >> In a project I am working on, I wrote a DynamicWebResource that
>>>>> generates
>>>>> >> a
>>>>> >> PDF file and, by setting the Content-Disposition in the header,
>>>>> got it so
>>>>> >> that the user is prompted to download the PDF when they click on a
>>>>> >> ResourceLink to my PDF-generating resource.
>>>>> >>
>>>>> >> That all works fine but now I need to open the PDF from a button.
>>>>> I want
>>>>> >> to
>>>>> >> allow the user to select a value in a form and press a button to
>>>>> view
>>>>> >> somewhat of a report for the item they selected. However, there
>>>>> doesn't
>>>>> >> appear to be any type of button that would lead a user to my
>>>>> >> DynamicWebResource. Is there any way to have a button do a submit
>>>>> >> (update
>>>>> >> the model) and then lead the user to a resource?
>>>>> >>
>>>>> >> -Brandon
>>>>
>>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Opening-DynamicWebResource-from-Button-AjaxButton--tp15459841p21474898.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]