Hi,

I've found a solution: overriding the AjaxPartialResponseRenderer service.
In my module class I put this:
public static void bind(ServiceBinder binder) {
binder.bind(AjaxPartialResponseRenderer.class, StbAjaxPartialResponseRenderer.class).withId("StbAjaxPartialResponseRenderer");
}
public static void contributeAliasOverrides(Configuration<AliasContribution<?>> configuration, @InjectService("StbAjaxPartialResponseRenderer") AjaxPartialResponseRenderer aprr) { configuration.add(AliasContribution.create(AjaxPartialResponseRenderer.class, aprr));
}
And here is my StbAjaxPartialResponseRenderer class:
public class AminoAjaxPartialResponseRenderer implements AjaxPartialResponseRenderer {

 private final MarkupWriterFactory factory;
 private final Request request;
 private final Response response;
 private final PartialMarkupRenderer partialMarkupRenderer;
 private final String outputEncoding;

 public AminoAjaxPartialResponseRenderer(MarkupWriterFactory factory,
                                        Request request,
                                        Response response,
PartialMarkupRenderer partialMarkupRenderer, @Inject @Symbol(SymbolConstants.CHARSET)
                                        String outputEncoding) {
     this.factory = factory;
     this.request = request;
     this.response = response;
     this.partialMarkupRenderer = partialMarkupRenderer;
     this.outputEncoding = outputEncoding;
 }

 public void renderPartialPageMarkup() throws IOException {
// This is a complex area as we are trying to keep public and private services properly // seperated, and trying to keep stateless and stateful (i.e., perthread scope) services // seperated. So we inform the stateful queue service what it needs to do here ... ContentType pageContentType = (ContentType) request.getAttribute(InternalConstants.CONTENT_TYPE_ATTRIBUTE_NAME); C*ontentType contentType = new ContentType("text/plain", outputEncoding); // The original was: ContentType contentType = new ContentType(InternalConstants.JSON_MIME_TYPE, outputEncoding);*
     MarkupWriter writer = factory.newPartialMarkupWriter(pageContentType);
     JSONObject reply = new JSONObject();
// ... and here, the pipeline eventually reaches the PRQ to let it render the root render command.
     partialMarkupRenderer.renderMarkup(writer, reply);
     PrintWriter pw = response.getPrintWriter(contentType.toString());
     pw.print(reply);
     pw.flush();
 }
}
This is the exact copy of the internal service class AjaxPartialResponseRendererImpl except one line. This solution works but I should not override an internal service, because if i upgrade to a new version and this service changes, my code won't work.
Any better solution for my problem? I would appreciate any answer.
Thank you, Zsombor

Zsombor Nemestóthy wrote:
Hi All!

I would like to change the content-type of the ajax response, when rendering a component from an ajax request.
The content-type is 'application/json' and it need to be 'plain/text'.
We develop an ip-tv middleware and the setTopBox's browser (Opera gogi) can not understand the application/json content-type (I think it treats the response as binary data). I handle the ajax response with my own javascript code, so 'plain/text' would be fine. I see from the source code that the mime-type's hard coded at the InternalConstants.JSON_MIME_TYPE variable, so i don't know how to change it.
Anyone has idea how to accomplish this?

Regards, Zsombor


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org


Reply via email to