struts2中以json的方式输出一张页面到前台

struts2中以json的方式输出一张页面到前台


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);
}
return true;
}

protected TemplateModel createModel(ActionInvocation invocation)
throws TemplateModelException {
ServletContext servletContext = ServletActionContext
.getServletContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ValueStack stack = ServletActionContext.getContext().getValueStack();
Object action = null;
if (invocation != null)
action = invocation.getAction(); // Added for NullPointException
return springConfigToFreemarkerManager.buildTemplateModel(stack, action,
servletContext, request, response, wrapper);
}

protected Configuration getConfiguration() throws TemplateException {
return springConfigToFreemarkerManager.getConfiguration(ServletActionContext
.getServletContext());
}

protected Configuration getUserConfiguration() {
return springConfigToFreemarkerManager.getUserConfiguration(ServletActionContext
.getServletContext());
}

protected Locale deduceLocale(ActionInvocation invocation) {
if (invocation.getAction() instanceof LocaleProvider) {
return ((LocaleProvider) invocation.getAction()).getLocale();
} else {
return configuration.getLocale();
}
}

protected ObjectWrapper getObjectWrapper() {
return configuration.getObjectWrapper();
}

public String getContentType() {
return pContentType;
}

public void setContentType(String aContentType) {
pContentType = aContentType;
}

protected Writer getWriter() throws IOException {
return ServletActionContext.getResponse().getWriter();
}

@Resource
public void setSpringConfigToFreemarkerManager(SpringConfigToFreemarkerManager mgr) {
this.springConfigToFreemarkerManager = mgr;
}

}



增加struts.xml配置
<package name="melon-default" extends="struts-default" >
<result-types>
<result-type name="jsonview" class="net.esj.struts.resultsupport.JsonViewResult"/>
</result-types>
</package>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值