package com.nfwork.dbfound.web.ui; import java.io.StringWriter; import java.io.Writer; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.Tag; import com.nfwork.dbfound.util.LogUtil; import com.nfwork.dbfound.util.UUIDUtil; import com.nfwork.dbfound.web.i18n.MultiLangUtil; import freemarker.template.Configuration; import freemarker.template.Template; public class Grid extends EventTag { private static final long serialVersionUID = 1L; private String width; private String height = "335"; private String id; private String queryUrl; private Columns columns; private String pagerSize = "10"; private String align = "center"; private boolean autoQuery = false; private String templateName = "grid.ftl"; private ToolBar toolBar; private String model; private String title; private String queryForm; private String viewForm; private String plugins; private String isCellEditable; private boolean forceFit = true; private boolean selectable = true; private boolean selectFirstRow = true; private boolean singleSelect; private boolean navBar = true; private boolean rowNumber = true; private String style = ""; private Configuration cfg; public int doStartTag() throws JspTagException { toolBar = null; columns = new Columns(); return super.doStartTag(); } public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); executeFreemarker(out); reset(); return EVAL_PAGE; } public void executeFreemarker(Writer out) { try { cfg = FreemarkFactory.getConfig(pageContext.getServletContext()); // 定义Template对象 Template template = cfg.getTemplate(templateName); // 定义数据 Map<String, Object> root = new HashMap<String, Object>(); // 将转换信息放到map中 columns grid buttons if (id == null || "".equals(id)) { id = "GRID" + UUIDUtil.getRandomString(5); } if (queryUrl == null || "".equals(queryUrl)) { queryUrl = model + ".query"; } root.put("grid", this); root.put("columns", columns.getColumns()); if (toolBar != null) { List<GridButton> buttons = toolBar.getButtons(); for (GridButton gridButton : buttons) { if ("delete".equals(gridButton.getType())) { if (gridButton.getAction() == null || "".equals(gridButton.getAction())) gridButton.setAction(model + ".execute!delete"); } else if ("save".equals(gridButton.getType())) { if (gridButton.getAction() == null || "".equals(gridButton.getAction())) gridButton .setAction(model + ".execute!addOrUpdate"); } if ("excel".equals(gridButton.getType())) { String url = queryUrl; if (url == null || url.startsWith("/") || url.startsWith("../") || url.startsWith("./") || url.startsWith("http")) { } else { url = pageContext.getRequest().getAttribute( "basePath") + url; } if (gridButton.getAction() == null || "".equals(gridButton.getAction())) gridButton.setAction(url.replace(".query", ".export")); } } root.put("buttons", buttons); } // 判断是不是在第一个tab页 Object first = pageContext.getAttribute("isFirstTab"); if (first != null && (Boolean) first == false) { root.put("delayRender", true); } else { root.put("delayRender", false); } String div = "<div style='margin-left:5px;margin-right:5px;margin-top:5px;margin-bottom:5px;" + style + "' id='" + id + "_div'></div>"; Tag t = findAncestorWithClass(this, Panel.class); if (t != null && findAncestorWithClass(this, Div.class) == null) { Panel parent = (Panel) t; if (parent.contentCmp == null) { parent.contentCmp = "'" + id + "'"; } else { parent.contentCmp += ",'" + id + "'"; } try { out = new StringWriter(); parent.html += div; template.process(root, out); parent.content.append(out); } finally { out.close(); } } else { root.put("div", div); template.process(root, out); } } catch (Exception e) { LogUtil.error(e.getMessage(), e); } } private void reset() { id = null; queryUrl = null; } public String getStyle() { return style; } public void setStyle(String style) { this.style = style; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getQueryUrl() { return queryUrl; } public void setQueryUrl(String queryUrl) { this.queryUrl = queryUrl; } public Columns getColumns() { return columns; } public void setColumns(Columns columns) { this.columns = columns; } public String getWidth() { return width; } public void setWidth(String width) { this.width = width; } public String getHeight() { return height; } public void setHeight(String height) { this.height = height; } public String getPagerSize() { return pagerSize; } public void setPagerSize(String pagerSize) { this.pagerSize = pagerSize; } public String getAlign() { return align; } public void setAlign(String align) { this.align = align; } public ToolBar getToolBar() { return toolBar; } public void setToolBar(ToolBar toolBar) { this.toolBar = toolBar; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getTitle() { return title; } public void setTitle(String title) { this.title = MultiLangUtil.getValue(title, pageContext); } public String getQueryForm() { return queryForm; } public void setQueryForm(String queryForm) { this.queryForm = queryForm; } public String getIsCellEditable() { return isCellEditable; } public void setIsCellEditable(String isCellEditable) { this.isCellEditable = isCellEditable; } public String getViewForm() { return viewForm; } public void setViewForm(String viewForm) { this.viewForm = viewForm; } public boolean isAutoQuery() { return autoQuery; } public void setAutoQuery(boolean autoQuery) { this.autoQuery = autoQuery; } public boolean isSelectable() { return selectable; } public void setSelectable(boolean selectable) { this.selectable = selectable; } public boolean isSingleSelect() { return singleSelect; } public void setSingleSelect(boolean singleSelect) { this.singleSelect = singleSelect; } public boolean isForceFit() { return forceFit; } public void setForceFit(boolean forceFit) { this.forceFit = forceFit; } public boolean isNavBar() { return navBar; } public void setNavBar(boolean navBar) { this.navBar = navBar; } public String getPlugins() { return plugins; } public void setPlugins(String plugins) { this.plugins = plugins; } public boolean isRowNumber() { return rowNumber; } public void setRowNumber(boolean rowNumber) { this.rowNumber = rowNumber; } public boolean isSelectFirstRow() { return selectFirstRow; } public void setSelectFirstRow(boolean selectFirstRow) { this.selectFirstRow = selectFirstRow; } }