/*
* Pager Tag Library
*
* Copyright (C) 2002 James Klicman <james@jsptags.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.frameworkset.common.tag.pager.tags;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import com.frameworkset.common.tag.BaseTag;
import com.frameworkset.platform.cms.driver.jsp.CMSServletRequest;
import com.frameworkset.util.ListInfo;
import com.frameworkset.util.ValueObjectUtil;
/**
*
* To change for your class or interface
*
* @author biaoping.yin
* @version 1.0
* 2005-2-3
*/
public abstract class PagerTagSupport extends BaseTag {
// protected PagerTag pagerTag = null;
// protected DetailTag detailTag = null;
protected FieldHelper fieldHelper;
protected PagerContext pagerContext;
protected int length(Object _actualValue)
{
return ValueObjectUtil.length(_actualValue);
}
/**
* 判断是否导出页面数据到文件中
* @return boolean
*/
protected boolean isExportMeta()
{
//如果页面标签是嵌套在分页标签中时,则根据分页标签的判断来决定是否导出页面数据
//如果页面标签是嵌套在详细标签中时,则根据详细标签的判断来决定是否导出页面数据
//否则不导出页面数据
// if(pagerTag != null)
// return pagerTag.isExportMeta();
// else if(detailTag != null)
// return detailTag.isExportMeta();
// else
return false;
}
protected final void restoreAttribute(String name, Object oldValue) {
if (oldValue != null)
pageContext.setAttribute(name, oldValue);
else
pageContext.removeAttribute(name,PageContext.PAGE_SCOPE);
}
protected PagerContext findPageContext()
{
return null;
}
// private final PagerTag findRequestPagerTag(String pagerId) {
// Object obj = request.getAttribute(pagerId);
// if (obj instanceof PagerTag)
// return (PagerTag) obj;
// return null;
// }
public int doStartTag() throws JspException {
// if (id != null) {
// pagerTag = findRequestPagerTag(id);
//
//// if (pagerTag == null)
//// throw new JspTagException("pager tag with id of \"" + id +
//// "\" not found.");
// } else {
// pagerTag = (PagerTag) findAncestorWithClass(this, PagerTag.class);
// if (pagerTag == null) {
// pagerTag = findRequestPagerTag(PagerTag.DEFAULT_ID);
//// if (pagerTag == null)
//// throw new JspTagException("not nested within a pager tag" +
//// " and no pager tag found at request scope.");
// }
// }
//
// if(pagerTag == null)
// detailTag = (DetailTag) findAncestorWithClass(this, DetailTag.class);
// if(this.pagerTag == null)
// fieldHelper = detailTag;
// else
// fieldHelper = pagerTag;
//
//
// return EVAL_BODY_INCLUDE;
pagerContext = null;
/*
* 查找并初始化标签的pagerContext对象,以下情况需要从外围环境中,查找pagerContext
* 1.标签的数据依赖于外围的标签提供,首先根据标签
* 本身得id值在request中查找,如果没有找到,如果id为null时
* 则需要
*/
if (id != null)
{
// pagerTag = findRequestPagerTag(id);
this.pagerContext = this.findRequestPagerContext(id);
if (pagerContext == null) {
pagerContext = findRequestPagerContext(PagerTag.DEFAULT_ID);
}
}
else
{
PagerTag pagerTag = (PagerTag) findAncestorWithClass(this, PagerTag.class);
if(this instanceof DetailTag)
{
}
else if(this instanceof PagerDataSet)
{
if(pagerTag != null && ((PagerDataSet)this).usedwithpagerTag())
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag == null )
{
pagerContext = pagerTag.pagerContext;
}
}
else
{
}
}
else if(this instanceof PagerRowCount)
{
if(pagerTag != null)
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag == null)
pagerContext = pagerTag.pagerContext;
else
pagerContext = listTag.pagerContext;
}
else
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag != null)
pagerContext = listTag.pagerContext;
}
}
else if(this instanceof IndexTag)
{
if(pagerTag != null)
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag == null)
pagerContext = pagerTag.pagerContext;
else
pagerContext = listTag.pagerContext;
}
else
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag != null)
pagerContext = listTag.pagerContext;
}
}
else if(this instanceof CellTag)
{
//无需初时化pagerContext
}
else if(this instanceof ParamTag || this instanceof ParamsTag || this instanceof BeanParamsTag)
{
if(pagerTag != null)
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag == null || listTag.isList)
pagerContext = pagerTag.pagerContext;
else
pagerContext = listTag.pagerContext;
}
}
else if(this instanceof TitleTag)
{
if(pagerTag != null)
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag == null || listTag.isList)
pagerContext = pagerTag.pagerContext;
else
pagerContext = listTag.pagerContext;
}
}
else if(this instanceof RowIDTag)
{
if(pagerTag != null)
{
// PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
// if(listTag == null)
pagerContext = pagerTag.pagerContext;
// else
// pagerContext = listTag.pagerContext;
}
else
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag != null)
pagerContext = listTag.pagerContext;
}
}
else if(this instanceof NotifyTag)
{
if(pagerTag != null)
{
// PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
// if(listTag == null)
pagerContext = pagerTag.pagerContext;
// else
// pagerContext = listTag.pagerContext;
}
else
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag != null)
pagerContext = listTag.pagerContext;
}
}
if(this instanceof QueryStringTag)
{
if(pagerTag != null)
{
// PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
// if(listTag == null)
pagerContext = pagerTag.pagerContext;
// else
// pagerContext = listTag.pagerContext;
}
else
{
PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
if(listTag != null)
pagerContext = listTag.pagerContext;
}
}
// /**
// *
// */
// if (pagerTag == null ) {
//
// PagerDataSet listTag = (PagerDataSet) findAncestorWithClass(this, PagerDataSet.class);
// if(listTag != null)
// {
// pagerContext = listTag.pagerContext;
// }
// else
// {
// DetailTag detailTag = (DetailTag) findAncestorWithClass(this, DetailTag.class);
// if(detailTag != null)
// pagerContext = detailTag.pagerContext;
// else if(this instanceof CellTag)
// {
//
//
//
// }
// }
// if(pagerContext == null)
// {
// pagerContext = findRequestPagerContext(PagerTag.DEFAULT_ID);
// }
// }
// else
// {
// pagerContext = pagerTag.pagerContext;
// }
}
if(pagerContext == null)
{
//进行额外处理
}
fieldHelper = pagerContext;
// if(this.pagerTag == null)
// fieldHelper = detailTag;
// else
// fieldHelper = pagerTag;
return EVAL_BODY_INCLUDE;
}
private PagerContext findRequestPagerContext(String pagerContextID) {
HttpServletRequest request = this.getHttpServletRequest();
// HttpServletResponse response = this.getHttpServletResponse();
Object obj = request.getAttribute(pagerContextID);
if (obj instanceof PagerContext)
return (PagerContext) obj;
return null;
}
public int doEndTag() throws JspException {
return super.doEndTag();
// return EVAL_PAGE;
}
public static void main(String[] args)
{
String ss = null;
boolean f = ss instanceof String;
System.out.println(f);
}
public void release() {
pagerContext = null;
super.release();
}
protected FieldHelper getFieldHelper()
{
return fieldHelper;
}
@Override
public void doFinally() {
try {
HttpServletRequest request = this.getHttpServletRequest();
// HttpServletResponse response = this.getHttpServletResponse();
if (request == null || !(request instanceof CMSServletRequest) )
{
pagerContext = null;
fieldHelper = null;
}
} catch (Exception e) {
}
super.doFinally();
}
}
/* vim:set ts=4 sw=4: */