1 package org
.argeo
.server
.mvc
;
3 import java
.util
.Locale
;
6 import javax
.servlet
.http
.HttpServletRequest
;
7 import javax
.servlet
.http
.HttpServletResponse
;
9 import org
.argeo
.ArgeoException
;
10 import org
.argeo
.server
.ServerAnswer
;
11 import org
.argeo
.server
.ServerSerializer
;
12 import org
.springframework
.validation
.BindingResult
;
13 import org
.springframework
.web
.servlet
.View
;
14 import org
.springframework
.web
.servlet
.view
.AbstractView
;
17 * Can be used as a standalone {@link View} or using
18 * {@link SerializingViewResolver}
20 public class SerializingView
extends AbstractView
implements MvcConstants
{
21 private final String viewName
;
22 private final Locale locale
;
24 private ServerSerializer serializer
;
26 public SerializingView() {
28 this.locale
= Locale
.getDefault();
31 public SerializingView(String viewName
, Locale locale
,
32 ServerSerializer serializer
) {
33 this.viewName
= viewName
;
35 this.serializer
= serializer
;
38 @SuppressWarnings( { "unchecked", "restriction" })
40 protected void renderMergedOutputModel(Map model
,
41 HttpServletRequest request
, HttpServletResponse response
)
43 Boolean serverAnswersAsHtml
= model
44 .containsKey(ANSWER_MODEL_KEY_AS_HTML
);
46 final Object answer
= findAnswerInModel(model
);
48 if ((answer
instanceof ServerAnswer
) && serverAnswersAsHtml
) {
49 response
.setContentType("text/html");
50 ServerAnswer serverAnswer
= (ServerAnswer
) answer
;
51 response
.getWriter().append("<pre>");
52 response
.getWriter().append(serverAnswer
.getMessage());
53 response
.getWriter().append("</pre>");
55 serializer
.serialize(answer
, request
, response
);
59 @SuppressWarnings("unchecked")
60 protected Object
findAnswerInModel(Map model
) {
61 if (model
.size() == 1) {
62 return model
.values().iterator().next();
63 } else if (model
.size() == 2) {
64 boolean otherIsBindingResult
= false;
65 Object answerValue
= null;
66 for (Object value
: model
.values()) {
67 if (value
instanceof BindingResult
)
68 otherIsBindingResult
= true;
73 if (otherIsBindingResult
)
77 if (model
.containsKey(ANSWER_MODEL_KEY
)) {
78 return model
.get(ANSWER_MODEL_KEY
);
79 } else if (model
.containsKey(ANSWER_MODEL_KEY_AS_HTML
)) {
80 return model
.get(ANSWER_MODEL_KEY_AS_HTML
);
81 } else if (viewName
!= null && model
.containsKey(viewName
)) {
82 return model
.get(viewName
);
84 if (model
.size() == 0)
85 throw new ArgeoException("Model is empty.");
87 throw new ArgeoException(
88 "Model has a size different from 1. Specify a modelKey.");
92 public String
getViewName() {
96 public Locale
getLocale() {
100 public void setSerializer(ServerSerializer serializer
) {
101 this.serializer
= serializer
;