日期:2014-05-16 浏览次数:20437 次
package net.esj.struts.resultsupport;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Properties;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.esj.basic.config.Config;
import net.esj.basic.plugins.freemarker.SpringConfigToFreemarkerManager;
import net.esj.basic.utils.hibe.HiJSONUtil;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.config.DefaultSettings;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.util.ResourceUtil;
import org.json.JSONException;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.LocaleProvider;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ValueStack;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
/**
* 将对应的页面文件以json的方式ajax输出到前台
* @author Administrator
*
*/
public class JsonViewResult extends FreemarkerUsageResult {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final String JSON_VIEW_PROPERTIES = "json.view.properties";
protected Configuration configuration;
protected Configuration userConfiguration;
protected ObjectWrapper wrapper;
private String pContentType = "text/text";
protected SpringConfigToFreemarkerManager springConfigToFreemarkerManager;
@Override
public void doExecute(String location, ActionInvocation invocation) throws IOException, TemplateException{
this.configuration = getConfiguration();
this.wrapper = getObjectWrapper();
if (!location.startsWith("/")) {
ActionContext ctx = invocation.getInvocationContext();
HttpServletRequest req = (HttpServletRequest) ctx
.get(ServletActionContext.HTTP_REQUEST);
String base = ResourceUtil.getResourceBase(req);
location = base + "/" + location;
}
Template template = null;
try{
if(canUserConfiguration(invocation)){
this.userConfiguration = getUserConfiguration();
template = userConfiguration.getTemplate(location,
deduceLocale(invocation));
}
}catch(Exception e){
//NOUSE
}finally{
if(template==null){
template = configuration.getTemplate(location,
deduceLocale(invocation));
}
}
TemplateModel model = createModel(invocation);
Writer out = new StringWriter();
if (preTemplateProcess(template, model)) {
try {
template.process(model, out);
String result = HiJSONUtil.toJSONString(out.toString());//转成JSON
ServletActionContext.getResponse().getWriter().print(result);
} catch (JSONException e) {
e.printStackTrace();
} finally {
postTemplateProcess(template, model);
}
}
}
protected void postTemplateProcess(Template template, TemplateModel data)
throws IOException {
}
protected boolean preTemplateProcess(Template template, TemplateModel model)
throws IOException {
Object attrContentType = template.getCustomAttribute("content_type");
if (attrContentType != null) {
ServletActionContext.getResponse().setContentType(
attrContentType.toString());
} else {
String contentType = getContentType();
if (contentType == null) {
contentType = "text/html";
}
String encoding = template.getEncoding();
if (encoding != null) {
contentType = contentType + "; charset=" + encoding;
}
ServletActionContext.getResponse().setContentType(contentType);