nice ! I like that !
+1
On Fri, Dec 21, 2012 at 3:34 PM, Daniel Bevenius
<daniel.bevenius(a)gmail.com> wrote:
Hi,
I'm working on AEROGEAR-693 and trying to figure out how to implement this
in the best way.
At the moment, the default type of ViewResponder is the MvcResponder which
forwards to a JSP page. By default, this means that if you do not specify a
produces() method on a route, this is what you'll get.
Now, the media types that are passed to the produces() method determine two
things: 1. How to match to Route that is the target of a request, matching
the HTTP Accept header. 2. Determining the ViewResponder to be used.
The issue here is that for both a HTMLResponder and a JSPResponder the media
type would in both cases betext/html.
How do we determine which one the users actually has created a view for (jsp
or html page)?
Well, we need some way to differantiate between a route that will respond
with a html view, but which uses a ceratain technique to render the html.
How about a introduce a type, MediaType that looks something like this:
public class MediaType {
public static final String HTML = "text/html";
public static final String ANY = "*/*";
public static final String JSON = "application/json";
private final String mediaType;
private final Class<? extends Responder> responderClass;
private MediaType(final String mediaType, Class<? extends Responder>
responderClass) {
this.mediaType = mediaType;
this.responderClass = responderClass;
}
public String getMediaType() {
return mediaType;
}
public Class<? extends Responder> getResponderClass() {
return responderClass;
}
@Override
public String toString() {
return "MediaType[type=" + mediaType + ", responderClass=" +
responderClass + "]";
}
public static MediaType html() {
return new MediaType(HTML, HtmlViewResponder.class);
}
public static MediaType jsp() {
return new MediaType(HTML, JspViewResponder.class);
}
public static MediaType json() {
return new MediaType(JSON, JsonResponder.class);
}
}
And we could add html(), jsp(), and json() methods to AbstractRoutingModule,
so a route that should be handled by a HtmlViewResponder would look like
this:
route()
.from("/plain")
.on(RequestMethod.GET)
.produces(html())
.to(Html.class).index();
To be backward compatible, if a produces() method was not specified it would
be the same as specifying:
.produces(json())
_______________________________________________
aerogear-dev mailing list
aerogear-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev