1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.action;
17
18 import java.io.Writer;
19
20 import javax.servlet.http.HttpServletRequest;
21 import javax.servlet.http.HttpServletResponse;
22
23 import org.seasar.cubby.controller.ActionContext;
24 import org.seasar.framework.util.JSONSerializer;
25 import org.seasar.framework.util.StringUtil;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public class Json extends AbstractActionResult {
58
59 private Object bean;
60
61 private String calllback;
62
63
64
65
66
67
68
69 public Json(final Object bean) {
70 this(bean, null);
71 }
72
73
74
75
76
77
78
79
80
81 public Json(final Object bean, final String callback) {
82 this.bean = bean;
83 this.calllback = callback;
84 }
85
86
87
88
89
90 public Object getBean() {
91 return this.bean;
92 }
93
94
95
96
97
98 public String getCallback() {
99 return this.calllback;
100 }
101
102 public void execute(final ActionContext context,
103 final HttpServletRequest request, final HttpServletResponse response)
104 throws Exception {
105
106 response.setContentType("text/javascript; charset=utf-8");
107 response.setHeader("Cache-Control", "no-cache");
108 response.setHeader("Pragma", "no-cache");
109
110 final String script;
111 if (isJsonp()) {
112 script = appendCallbackFunction(JSONSerializer.serialize(bean),
113 calllback);
114 } else {
115 script = JSONSerializer.serialize(bean);
116 }
117
118 final Writer writer = response.getWriter();
119 writer.write(script);
120 writer.flush();
121 }
122
123 private boolean isJsonp() {
124 return !StringUtil.isEmpty(calllback);
125 }
126
127 private static String appendCallbackFunction(final String script,
128 final String callback) {
129 final StringBuilder builder = new StringBuilder(script.length()
130 + callback.length() + 10);
131 builder.append(callback);
132 builder.append("(");
133 builder.append(script);
134 builder.append(");");
135 return builder.toString();
136 }
137
138 }