图表、看板展示支持请求参数传入,将所有传入参数加入页面的dashboard.renderContext.attributes内

This commit is contained in:
interestinglife 2020-06-03 23:23:49 +08:00
parent 605d37cdd6
commit ca6de9d0a5
3 changed files with 74 additions and 56 deletions

View File

@ -7,6 +7,7 @@
*/
package org.datagear.web.controller;
import java.io.IOException;
import java.io.Serializable;
import java.io.Writer;
import java.util.ArrayList;
@ -37,6 +38,7 @@ import org.datagear.analysis.support.DefaultRenderContext;
import org.datagear.analysis.support.html.HtmlTplDashboard;
import org.datagear.analysis.support.html.HtmlTplDashboardRenderAttr;
import org.datagear.analysis.support.html.HtmlTplDashboardRenderAttr.WebContext;
import org.datagear.analysis.support.html.HtmlTplDashboardWidgetRenderer;
import org.datagear.util.StringUtil;
import org.datagear.web.util.WebUtils;
@ -65,6 +67,73 @@ public class AbstractDataAnalysisController extends AbstractController
this.dataSetParamValueConverter = dataSetParamValueConverter;
}
protected RenderContext createHtmlRenderContext(HttpServletRequest request, HttpServletResponse response,
HtmlTplDashboardRenderAttr renderAttr,
WebContext webContext, HtmlTplDashboardWidgetRenderer htmlTplDashboardWidgetRenderer) throws IOException
{
RenderContext renderContext = new DefaultRenderContext(resolveParamValues(request));
Writer out = response.getWriter();
RenderStyle renderStyle = resolveRenderStyle(request);
renderAttr.inflate(renderContext, out, webContext);
renderAttr.setRenderStyle(renderContext, renderStyle);
DashboardTheme dashboardTheme = htmlTplDashboardWidgetRenderer.inflateDashboardTheme(renderContext, renderAttr,
renderStyle);
renderAttr.setIgnoreRenderAttrs(renderContext,
Arrays.asList(renderAttr.getHtmlWriterName(), renderAttr.getHtmlTitleHandlerName(),
renderAttr.getIgnoreRenderAttrsName(), HtmlTplDashboardRenderAttr.ATTR_NAME));
setDashboardThemeAttribute(request.getSession(), dashboardTheme);
return renderContext;
}
protected HtmlTplDashboardRenderAttr createHtmlTplDashboardRenderAttr()
{
return new HtmlTplDashboardRenderAttr();
}
protected void setDashboardThemeAttribute(HttpSession session, DashboardTheme theme)
{
session.setAttribute(AbstractDataAnalysisController.class.getSimpleName(), theme);
}
/**
* 获取{@linkplain DashboardTheme}没有则返回{@code null}
*
* @param session
* @return
*/
protected DashboardTheme getDashboardThemeAttribute(HttpSession session)
{
return (DashboardTheme) session.getAttribute(AbstractDataAnalysisController.class.getSimpleName());
}
protected Map<String, ?> resolveParamValues(HttpServletRequest request)
{
Map<String, Object> paramValues = new HashMap<String, Object>();
Map<String, String[]> origin = request.getParameterMap();
for (Map.Entry<String, String[]> entry : origin.entrySet())
{
String name = entry.getKey();
String[] values = entry.getValue();
if (values == null || values.length == 0)
continue;
if (values.length == 1)
paramValues.put(name, values[0]);
else
paramValues.put(name, values);
}
return paramValues;
}
protected RenderStyle resolveRenderStyle(HttpServletRequest request)
{
String style = request.getParameter("renderStyle");
@ -95,41 +164,6 @@ public class AbstractDataAnalysisController extends AbstractController
return RenderStyle.LIGHT;
}
protected RenderContext createHtmlRenderContext(HttpServletRequest request, HtmlTplDashboardRenderAttr renderAttr,
Writer out, WebContext webContext, RenderStyle renderStyle)
{
RenderContext renderContext = new DefaultRenderContext();
renderAttr.inflate(renderContext, out, webContext);
renderAttr.setRenderStyle(renderContext, renderStyle);
renderAttr.setIgnoreRenderAttrs(renderContext,
Arrays.asList(renderAttr.getHtmlWriterName(), renderAttr.getHtmlTitleHandlerName(),
renderAttr.getIgnoreRenderAttrsName(), HtmlTplDashboardRenderAttr.ATTR_NAME));
return renderContext;
}
protected HtmlTplDashboardRenderAttr createHtmlTplDashboardRenderAttr()
{
return new HtmlTplDashboardRenderAttr();
}
protected void setDashboardThemeAttribute(HttpSession session, DashboardTheme theme)
{
session.setAttribute(AbstractDataAnalysisController.class.getSimpleName(), theme);
}
/**
* 获取{@linkplain DashboardTheme}没有则返回{@code null}
*
* @param session
* @return
*/
protected DashboardTheme getDashboardThemeAttribute(HttpSession session)
{
return (DashboardTheme) session.getAttribute(AbstractDataAnalysisController.class.getSimpleName());
}
/**
* 解析展示看板请求路径的看板资源名
* <p>

View File

@ -6,7 +6,6 @@ package org.datagear.web.controller;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@ -16,10 +15,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.datagear.analysis.ChartPluginManager;
import org.datagear.analysis.DashboardTheme;
import org.datagear.analysis.DataSetResult;
import org.datagear.analysis.RenderContext;
import org.datagear.analysis.RenderStyle;
import org.datagear.analysis.TemplateDashboardWidgetResManager;
import org.datagear.analysis.support.html.HtmlChartPlugin;
import org.datagear.analysis.support.html.HtmlTplDashboard;
@ -384,18 +381,12 @@ public class ChartController extends AbstractChartPluginAwareController implemen
response.setContentType(CONTENT_TYPE_HTML);
HtmlTplDashboardRenderAttr renderAttr = createHtmlTplDashboardRenderAttr();
Writer out = response.getWriter();
RenderStyle renderStyle = resolveRenderStyle(request);
RenderContext renderContext = createHtmlRenderContext(request, renderAttr, out, createWebContext(request),
renderStyle);
DashboardTheme dashboardTheme = getChartShowHtmlTplDashboardWidgetHtmlRenderer()
.inflateDashboardTheme(renderContext, renderAttr, renderStyle);
RenderContext renderContext = createHtmlRenderContext(request, response, renderAttr, createWebContext(request),
getChartShowHtmlTplDashboardWidgetHtmlRenderer());
AddPrefixHtmlTitleHandler htmlTitleHandler = new AddPrefixHtmlTitleHandler(
getMessage(request, "chart.show.htmlTitlePrefix", getMessage(request, "app.name")));
renderAttr.setHtmlTitleHandler(renderContext, htmlTitleHandler);
setDashboardThemeAttribute(request.getSession(), dashboardTheme);
HtmlTplDashboard dashboard = dashboardWidget.render(renderContext);
SessionHtmlTplDashboardManager dashboardManager = getSessionHtmlTplDashboardManagerNotNull(request);

View File

@ -10,7 +10,6 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@ -27,7 +26,6 @@ import org.datagear.analysis.ChartTheme;
import org.datagear.analysis.DashboardTheme;
import org.datagear.analysis.DataSetResult;
import org.datagear.analysis.RenderContext;
import org.datagear.analysis.RenderStyle;
import org.datagear.analysis.TemplateDashboardWidgetResManager;
import org.datagear.analysis.support.ChartWidget;
import org.datagear.analysis.support.ChartWidgetSource;
@ -707,18 +705,13 @@ public class DashboardController extends AbstractDataAnalysisController implemen
response.setContentType(CONTENT_TYPE_HTML);
HtmlTplDashboardRenderAttr renderAttr = createHtmlTplDashboardRenderAttr();
Writer out = response.getWriter();
RenderStyle renderStyle = resolveRenderStyle(request);
RenderContext renderContext = createHtmlRenderContext(request, renderAttr, out, createWebContext(request),
renderStyle);
DashboardTheme dashboardTheme = getHtmlTplDashboardWidgetEntityService().getHtmlTplDashboardWidgetRenderer()
.inflateDashboardTheme(renderContext, renderAttr, renderStyle);
RenderContext renderContext = createHtmlRenderContext(request, response, renderAttr,
createWebContext(request),
getHtmlTplDashboardWidgetEntityService().getHtmlTplDashboardWidgetRenderer());
AddPrefixHtmlTitleHandler htmlTitleHandler = new AddPrefixHtmlTitleHandler(
getMessage(request, "dashboard.show.htmlTitlePrefix", getMessage(request, "app.name")));
renderAttr.setHtmlTitleHandler(renderContext, htmlTitleHandler);
setDashboardThemeAttribute(request.getSession(), dashboardTheme);
HtmlTplDashboard dashboard = dashboardWidget.render(renderContext, template);
SessionHtmlTplDashboardManager dashboardManager = getSessionHtmlTplDashboardManagerNotNull(request);