package com.jspxcms.common.freemarker; import java.io.IOException; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.springframework.web.util.HtmlUtils; import com.jspxcms.common.web.ImageAnchor; import freemarker.core.Environment; import freemarker.template.TemplateDirectiveBody; import freemarker.template.TemplateDirectiveModel; import freemarker.template.TemplateException; import freemarker.template.TemplateModel; /** * FreeMarker ImageAnchor标签 * * 生成html img标签 * * @author liufang * */ public class ImageAnchorDirective implements TemplateDirectiveModel { public static final String BEAN = "bean"; public static final String TARGET = "target"; public static final String WIDTH = "width"; public static final String HEIGHT = "height"; public static final String ATTRS = "attrs"; public static final String IMG_ATTRS = "imgAttrs"; @SuppressWarnings({ "unchecked", "rawtypes" }) public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { ImageAnchor img = Freemarkers .getObject(params, BEAN, ImageAnchor.class); String target = Freemarkers.getString(params, TARGET); if (img.getNewWindow() != null && img.getNewWindow()) { target = "_blank"; } Integer width = Freemarkers.getInteger(params, WIDTH); if (width == null) { width = img.getWidth(); } Integer height = Freemarkers.getInteger(params, HEIGHT); if (height == null) { height = img.getHeight(); } String attrs = Freemarkers.getString(params, ATTRS); String imgAttrs = Freemarkers.getString(params, IMG_ATTRS); String src = img.getSrc(); String title = HtmlUtils.htmlEscape(img.getTitle()); StringBuilder buff = new StringBuilder(); buff.append("<a href=\"").append(img.getUrl()).append("\""); if (StringUtils.isNotBlank(target)) { buff.append(" target=\"").append(target).append("\""); } if (StringUtils.isNotBlank(attrs)) { buff.append(" ").append(attrs); } buff.append(">"); buff.append("<img src=\"").append(src).append("\""); buff.append(" alt=\"").append(title).append("\""); buff.append(" title=\"").append(title).append("\""); if (width != null) { buff.append(" width=\"").append(width).append("\""); } if (height != null) { buff.append(" height=\"").append(height).append("\""); } if (StringUtils.isNotBlank(imgAttrs)) { buff.append(" ").append(imgAttrs); } buff.append("/>"); buff.append("</a>"); env.getOut().write(buff.toString()); } }