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
58
59 public class Json extends AbstractActionResult {
60
61 private Object bean;
62
63 private String calllback;
64
65
66
67
68
69
70
71 public Json(final Object bean) {
72 this(bean, null);
73 }
74
75
76
77
78
79
80
81
82
83 public Json(final Object bean, final String callback) {
84 this.bean = bean;
85 this.calllback = callback;
86 }
87
88
89
90
91
92
93 public Object getBean() {
94 return this.bean;
95 }
96
97
98
99
100
101
102 public String getCallback() {
103 return this.calllback;
104 }
105
106
107
108
109 public void execute(final ActionContext context,
110 final HttpServletRequest request, final HttpServletResponse response)
111 throws Exception {
112
113 response.setContentType("text/javascript; charset=utf-8");
114 response.setHeader("Cache-Control", "no-cache");
115 response.setHeader("Pragma", "no-cache");
116
117 final String script;
118 if (isJsonp()) {
119 script = appendCallbackFunction(JSONSerializer.serialize(bean),
120 calllback);
121 } else {
122 script = JSONSerializer.serialize(bean);
123 }
124
125 final Writer writer = response.getWriter();
126 writer.write(script);
127 writer.flush();
128 }
129
130 private boolean isJsonp() {
131 return !StringUtil.isEmpty(calllback);
132 }
133
134 private static String appendCallbackFunction(final String script,
135 final String callback) {
136 final StringBuilder builder = new StringBuilder(script.length()
137 + callback.length() + 10);
138 builder.append(callback);
139 builder.append("(");
140 builder.append(script);
141 builder.append(");");
142 return builder.toString();
143 }
144
145 }