Java源码示例:org.eclipse.krazo.engine.Viewable
示例1
/**
* XHTML type should override static HTML one in @Produces in this case.
*/
@GET
@Path("other_produces1")
@Produces("text/html") // overridden below
public Response otherProduces1() {
return Response.ok(new Viewable("hello.jsp"), "application/xhtml+xml").build();
}
示例2
/**
* XHTML type should override static HTML one in @Produces in this case
* when using @View.
*/
@GET
@Path("other_produces2")
@Produces("text/html") // overridden below
@View("hello.jsp")
public Response otherProduces2() {
return Response.ok(new Viewable("hello.jsp"), "application/xhtml+xml").build();
}
示例3
/**
* Sets language to "es".
*/
@GET
@Path("language1")
@Produces("text/html") // overridden below
public Response language1() {
return Response.ok(new Viewable("hello.jsp"), "application/xhtml+xml").language("es").build();
}
示例4
/**
* Sets language to "es" when using @View.
*/
@GET
@Path("language2")
@Produces("text/html") // overridden below
@View("hello.jsp")
public Response language2() {
return Response.ok(new Viewable("hello.jsp"), "application/xhtml+xml").language("es").build();
}
示例5
/**
* Sets locale to UK.
*/
@GET
@Path("locale1")
@Produces("text/html") // overridden below
public Response locale1() {
return Response.ok(new Viewable("hello.jsp"), "application/xhtml+xml").language(Locale.UK).build();
}
示例6
/**
* Sets locale to UK when using @View.
*/
@GET
@Path("locale2")
@Produces("text/html") // overridden below
@View("hello.jsp")
public Response locale2() {
return Response.ok(new Viewable("hello.jsp"), "application/xhtml+xml").language(Locale.UK).build();
}
示例7
@Override
public Response toResponse(MvcViewException exception) {
ModelsImpl models = new ModelsImpl();
models.put("error", exception.getMessage());
Viewable viewable = new Viewable("mvc-error.jsp", models);
return Response.status(492)
.type(MediaType.TEXT_HTML_TYPE)
.entity(viewable)
.build();
}
示例8
public void fireBeforeProcessViewEvent(ViewEngine engine, Viewable viewable) {
if (KrazoCdiExtension.isEventObserved(BeforeProcessViewEvent.class)) {
final BeforeProcessViewEventImpl event = new BeforeProcessViewEventImpl();
event.setEngine(engine.getClass());
event.setView(viewable.getView());
mvcEventDispatcher.fire(event);
}
}
示例9
public void fireAfterProcessViewEvent(ViewEngine engine, Viewable viewable) {
if (KrazoCdiExtension.isEventObserved(AfterProcessViewEvent.class)) {
final AfterProcessViewEventImpl event = new AfterProcessViewEventImpl();
event.setEngine(engine.getClass());
event.setView(viewable.getView());
mvcEventDispatcher.fire(event);
}
}
示例10
/**
* Test isWriteable method.
*/
@Test
public void testIsWriteable() {
ViewableWriter writer = new ViewableWriter();
assertFalse(writer.isWriteable(null, null, new Annotation[] {}, MediaType.WILDCARD_TYPE));
assertTrue(writer.isWriteable(Viewable.class, null, new Annotation[] {}, MediaType.WILDCARD_TYPE));
}
示例11
@GET
@Path("{id}")
public Viewable taskDetails(@PathParam("id") @NotNull Long id) {
log.log(Level.INFO, "get task by [email protected]{0}", id);
Task task = taskRepository.findById(id);
models.put("details", task);
return new Viewable("details.jspx");
}
示例12
@GET
@Path("new")
public Viewable add() {
log.log(Level.INFO, "add new task");
return new Viewable("add.jspx");
}
示例13
@GET
@Path("{id}/edit")
public Viewable edit(@PathParam("id") Long id) {
log.log(Level.INFO, "edit task @{0}", id);
Task task = taskRepository.findById(id);
models.put("task", task);
return new Viewable("edit.jspx");
}
示例14
@GET
@Path("{id}")
public Viewable taskDetails(@PathParam("id") @NotNull Long id) {
log.log(Level.INFO, "get task by [email protected]{0}", id);
Task task = taskRepository.findById(id);
models.put("details", task);
return new Viewable("details.xhtml");
}
示例15
@GET
@Path("new")
public Viewable add() {
log.log(Level.INFO, "add new task");
return new Viewable("add.xhtml");
}
示例16
@GET
@Path("{id}/edit")
public Viewable edit(@PathParam("id") Long id) {
log.log(Level.INFO, "edit task @{0}", id);
Task task = taskRepository.findById(id);
models.put("task", task);
return new Viewable("edit.xhtml");
}
示例17
@GET
@Path("update/{id}")
public Viewable update(@PathParam("id") Long id) {
Optional<Person> person = repository.findById(id);
this.models.put("person", person.orElseThrow(NOT_FOUND_EXCEPTION));
this.models.put("countries", getCountries());
return new Viewable("change.jsp", models);
}
示例18
@GET
@Path("update/{id}")
public Viewable update(@PathParam("id") Long id) {
Optional<Person> person = repository.findById(id);
this.models.put("person", person.orElseThrow(NOT_FOUND_EXCEPTION));
this.models.put("countries", getCountries());
return new Viewable("change.jsp", models);
}
示例19
@Override
public Response toResponse(ClientErrorException exception) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new Viewable("hello.jsp"))
.build();
}
示例20
@GET
@Path("viewable")
public Viewable getViewable() {
return new Viewable("hello.jsp");
}
示例21
@GET
@Path("response/viewable")
public Response getResponseViewable() {
return Response.ok().entity(new Viewable("hello.jsp")).build();
}
示例22
@GET
@Path("viewable")
public Viewable getViewAble() {
return new Viewable("extension");
}
示例23
@Override
public boolean isWriteable(Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return aClass == Viewable.class;
}
示例24
@Override
public long getSize(Viewable viewable, Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return -1;
}
示例25
/**
* Searches for a suitable {@link javax.mvc.engine.ViewEngine} to process the view. If no engine
* is found, is forwards the request back to the servlet container.
*/
@Override
public void writeTo(Viewable viewable, Class<?> aClass, Type type, Annotation[] annotations, MediaType resolvedMediaType,
MultivaluedMap<String, Object> headers, OutputStream out)
throws IOException, WebApplicationException {
// Find engine for this Viewable
final ViewEngine engine = engineFinder.find(viewable);
if (engine == null) {
throw new ServerErrorException(messages.get("NoViewEngine", viewable), INTERNAL_SERVER_ERROR);
}
// build the full media type (including the charset) and make sure the response header is set correctly
MediaType mediaType = buildMediaTypeWithCharset(resolvedMediaType);
headers.putSingle(HttpHeaders.CONTENT_TYPE, mediaType);
HttpServletRequest request = unwrapOriginalRequest(injectedRequest);
HttpServletResponse response = unwrapOriginalResponse(injectedResponse);
// Create wrapper for response
final ServletOutputStream responseStream = new DelegatingServletOutputStream(out);
final HttpServletResponse responseWrapper = new MvcHttpServletResponse(response, responseStream, mediaType, headers);
// Pass request to view engine
try {
// If no models in viewable, inject via CDI
Models models = viewable.getModels();
if (models == null) {
models = modelsInstance.get();
}
// Bind EL 'mvc' object in models
models.put("mvc", mvc);
// Execute the view engine
eventDispatcher.fireBeforeProcessViewEvent(engine, viewable);
try {
// Process view using selected engine
engine.processView(new ViewEngineContextImpl(viewable.getView(), models, request, responseWrapper,
headers, responseStream, mediaType, uriInfo, resourceInfo, config, mvc.getLocale()));
} finally {
eventDispatcher.fireAfterProcessViewEvent(engine, viewable);
}
} catch (ViewEngineException e) {
throw new ServerErrorException(INTERNAL_SERVER_ERROR, e);
} finally {
responseWrapper.getWriter().flush();
}
}
示例26
/**
* Test writeTo method.
*
* @throws Exception when a serious error occurs.
*/
@Test
public void testWriteTo() throws Exception {
ViewableWriter writer = new ViewableWriter();
Field mvcField = writer.getClass().getDeclaredField("mvc");
mvcField.setAccessible(true);
mvcField.set(writer, new MvcContextImpl());
ViewEngineFinder finder = EasyMock.createStrictMock(ViewEngineFinder.class);
Field finderField = writer.getClass().getDeclaredField("engineFinder");
finderField.setAccessible(true);
finderField.set(writer, finder);
HttpServletRequest request = EasyMock.createStrictMock(HttpServletRequest.class);
Field requestField = writer.getClass().getDeclaredField("injectedRequest");
requestField.setAccessible(true);
requestField.set(writer, request);
Event<MvcEvent> dispatcher = EasyMock.createStrictMock(Event.class);
Field dispatcherField = writer.getClass().getDeclaredField("dispatcher");
dispatcherField.setAccessible(true);
dispatcherField.set(writer, dispatcher);
EventDispatcher eventDispatcher = EasyMock.createMock(EventDispatcher.class);
Field eventDispatcherField = writer.getClass().getDeclaredField("eventDispatcher");
eventDispatcherField.setAccessible(true);
eventDispatcherField.set(writer, eventDispatcher);
ViewEngine viewEngine = EasyMock.createStrictMock(ViewEngine.class);
HttpServletResponse response = EasyMock.createStrictMock(HttpServletResponse.class);
response.setContentType(eq("text/html;charset=UTF-8"));
expect(response.getCharacterEncoding()).andReturn("UTF-8");
Field responseField = writer.getClass().getDeclaredField("injectedResponse");
responseField.setAccessible(true);
responseField.set(writer, response);
Configuration config = EasyMock.createStrictMock(Configuration.class);
Field configField = writer.getClass().getDeclaredField("config");
configField.setAccessible(true);
configField.set(writer, config);
MultivaluedHashMap map = new MultivaluedHashMap();
ArrayList<MediaType> contentTypes = new ArrayList<>();
contentTypes.add(MediaType.TEXT_HTML_TYPE);
map.put("Content-Type", contentTypes);
Viewable viewable = new Viewable("myview");
viewable.setModels(new ModelsImpl());
expect(finder.find(anyObject())).andReturn(viewEngine);
viewEngine.processView((ViewEngineContext) anyObject());
replay(finder, request, viewEngine, response);
writer.writeTo(viewable, null, null, new Annotation[] {}, MediaType.TEXT_HTML_TYPE, map, null);
verify(finder, request, viewEngine, response);
}
示例27
@GET
@Path("new")
public Viewable newElement() {
this.models.put("countries", getCountries());
return new Viewable("insert.jsp");
}
示例28
@GET
@Path("new")
public Viewable newElement() {
this.models.put("countries", getCountries());
return new Viewable("insert.jsp");
}