Update: overriding respond and setting the contentType directly works great :)

-- Edvin

Edvin Syse skrev:
Sure I could, but since the StringRequestTarget constructor takes a content-type argument, I find it strange that this isn't sent to the browser. Sure enough, StringRequestTarget#respond, creates as StringBufferResourcesStream with the contentType field set correctly, but then it just copies the stream, and doesn't set any headers.

Maybe this will work?

RequestCycle.get().setRequestTarget(new StringRequestTarget("text/html", body) {
    public void respond(RequestCycle requestCycle) {
        requestCycle.getResponse().setContentType("text/html");
        super.respond(requestCycle);
    }
});

-- Edvin

richardwilko skrev:
You could implement your own dynamic web resource. eg for a kml page on our
site:


public class KMLResource extends DynamicWebResource
{

    Document kml;
public KMLResource(Document kml)
    {
        this.kml = kml;
    }
@Override
    protected ResourceState getResourceState()
    {
        final XMLOutputter out = new XMLOutputter();
KMLResourceState kmlResourceState = new KMLResourceState();
        try
        {
            ByteArrayOutputStream byteout = new ByteArrayOutputStream();
            out.output(kml, byteout);
            kmlResourceState.setData(byteout.toByteArray());
            byteout.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return kmlResourceState;
    }

class KMLResourceState extends ResourceState
    {
        @Override
        public String getContentType()
        {
            return "application/vnd.google-earth.kml+xml";
        }

        private byte[] data = new byte[0];
        @Override
        public byte[] getData()
        {
            return data;
        }
        public void setData(byte[] data)
        {
            this.data = data;
        }
@Override
        public int getLength()
        {
            return data.length;
        }
    }
}

then use it like this in your page

final KMLResource kmlResource = new KMLResource(kml);
getRequestCycle().setRequestTarget(new IRequestTarget() {

            public void detach(RequestCycle requestCycle) {
}
            public void respond(RequestCycle requestCycle) {
ResourceStreamRequestTarget target = new
ResourceStreamRequestTarget(kmlResource.getResourceStream());
                target.setFileName("name");

                getRequestCycle().setRequestTarget(target);             }
        });

just alter it for text rather than a Document

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


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

Reply via email to