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]

Reply via email to