package com.aggrepoint.winlet.jsp.site.taglib; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import com.aggrepoint.winlet.AuthorizationEngine; import com.aggrepoint.winlet.ContextUtils; import com.aggrepoint.winlet.site.SiteContext; import com.aggrepoint.winlet.site.domain.Page; /** * 计算在指定栏目下包含多少个子栏目 * * @author Jiangming Yang (yangjm@gmail.com) */ /* * <ae:subcount level="0"/> * * <ae:tree level="0" name="page0"> <ae:tree root="page0" name="page1"> * <ae:subcount page="page1"/> </ae:tree> </ae:tree> * * <ae:subcount level="0" name="ccc"/> <%= ccc * 3 %> */ public class SubCountTag extends TagSupport { static final long serialVersionUID = 0; int m_iLevel; String m_strPage; String m_strName; public SubCountTag() { m_strPage = null; m_strName = null; m_iLevel = -1; } public void setLevel(int level) { m_iLevel = level; } public void setPage(String page) { m_strPage = page; } public void setName(String name) { m_strName = name; } public int doStartTag() throws JspException { try { JspWriter out = pageContext.getOut(); int count = 0; SiteContext sc = (SiteContext) pageContext.getRequest() .getAttribute(SiteContext.SITE_CONTEXT_KEY); AuthorizationEngine ap = ContextUtils .getAuthorizationEngine((HttpServletRequest) pageContext .getRequest()); Page page = null; Page currentInTree = sc.getPage(); if (m_strPage != null) // 直接指定了要展现的根栏目 page = (Page) pageContext.getAttribute(m_strPage); else if (m_iLevel > -1) { // 指定了要展现的级别 if (m_iLevel <= currentInTree.getLevel()) { page = currentInTree; while (m_iLevel < page.getLevel()) page = page.getParent(); } } else { // 没有指定根栏目 TreeTag tt = (TreeTag) TagSupport.findAncestorWithClass(this, TreeTag.class); if (tt != null) page = tt.getPage(); else page = sc.getBranch().getHome(ap); } if (page != null) count = page.getPages(ap, false, true, false).size(); if (m_strName == null) out.print(count); else pageContext.setAttribute(m_strName, new Integer(count)); } catch (Exception e) { throw new JspException(e.getMessage()); } return SKIP_BODY; } }