cancel
Showing results for 
Search instead for 
Did you mean: 

Page number instead of number of entries

Former Member
0 Kudos

Hello

I have a requirement for changing the number of entries in KM to page numbers.

So I need to change:

1-10 11-20 21-24

to

1 2 3

I found a thread on sdn about this requirement, but there wasn't much information. It just said to write your own Collection Renderer.

I was able to add something between the breadcrumb (showing the map you are on the moment) and page numbers. So I still don't know where the 'page numbers' are added?

Is there anyone with experience? Or ideas?

Thanks!

Christof

The decompiled Collection Renderer:


package be.kindengezin.wcm.rendering.collection.cm;
// FrontEnd Plus GUI for JAD
// DeCompiled : CollectionListRenderer.class

import com.sap.tc.logging.Location;
import com.sap.tc.logging.LogController;
import com.sapportals.htmlb.*;
import com.sapportals.htmlb.enum.CellHAlign;
import com.sapportals.htmlb.enum.CellVAlign;
import com.sapportals.htmlb.page.DynPage;
import com.sapportals.htmlb.rendering.IPageContext;
import com.sapportals.wcm.WcmException;
import com.sapportals.wcm.control.util.EmptyComponent;
import com.sapportals.wcm.control.util.FolderSettings;
import com.sapportals.wcm.control.util.property.*;
import com.sapportals.wcm.rendering.base.*;
import com.sapportals.wcm.rendering.collection.LightCollectionRenderer;
//import com.sapportals.wcm.rendering.collection.cm.PropertyColumnRenderer;
//import com.sapportals.wcm.rendering.collection.cm.PropertyHeaderRenderer;
import com.sapportals.wcm.rendering.readymades.EmptyCollectionInfo;
import com.sapportals.wcm.rendering.resource.IResourceRenderer;
import com.sapportals.wcm.rendering.util.HtmlRendererUtil;
import com.sapportals.wcm.repository.*;
import com.sapportals.wcm.repository.service.IRepositoryServiceFactory;
import com.sapportals.wcm.repository.service.layout.IDebugContainer;
import com.sapportals.wcm.repository.service.layout.customizing.*;
import com.sapportals.wcm.service.propertyconfig.*;
import com.sapportals.wcm.util.logging.LoggingFormatter;
import com.sapportals.wcm.util.profiler.IProfiler;
import com.sapportals.wcm.util.profiler.Profiler;
import com.sapportals.wdf.WdfException;
import java.util.*;

import to.work.PropertyColumnRenderer;
import to.work.PropertyHeaderRenderer;

// Referenced classes of package com.sapportals.wcm.rendering.collection.cm:
//			  PropertyHeaderRenderer, PropertyColumnRenderer

public class CollectionListRenderer extends LightCollectionRenderer
{
	protected class HeaderItem
	{

		private int rowSpan;
		private int colSpan;
		private IMetaName labelMetaName;
		private IPropertyColumn column;
		private boolean processed;

		public void setRowSpan(int row)
		{
			rowSpan = row;
		}

		public int getRowSpan()
		{
			return rowSpan;
		}

		public void setColSpan(int col)
		{
			colSpan = col;
		}

		public int getColSpan()
		{
			return colSpan;
		}

		public void setLabelMetaName(IMetaName column)
		{
			labelMetaName = column;
		}

		public IMetaName getLabelMetaName()
		{
			return labelMetaName;
		}

		public void setPropertyColumn(IPropertyColumn column)
		{
			this.column = column;
		}

		public IPropertyColumn getPropertyColumn()
		{
			return column;
		}

		public String toString()
		{
			return "Item:  RowSpan=" + rowSpan + "; ColSpan=" + colSpan + "; PropertyColumn=" + getLabelMetaName();
		}

		public HeaderItem()
		{
			rowSpan = 0;
			colSpan = 0;
			labelMetaName = null;
			column = null;
			processed = false;
		}

		public HeaderItem(int rowSpan, int colSpan, IMetaName metaName, IPropertyColumn column)
		{
			this.rowSpan = 0;
			this.colSpan = 0;
			labelMetaName = null;
			this.column = null;
			processed = false;
			this.rowSpan = rowSpan;
			this.colSpan = colSpan;
			labelMetaName = metaName;
			this.column = column;
		}
	}


	private static final String PROFILER_PATH_UI_RENDER = "/KM/FLEXUI/RENDER/UI";
	private static final String PROFILER_PATH_UI_RENDER_ROW = "/KM/FLEXUI/RENDER/UI/ROW ";
	private static final String PROFILER_PATH_UI_RENDER_GETPROPS = "/KM/FLEXUI/RENDER/UI/GETPROPS";
	private static IProfiler s_profiler = Profiler.getInstance();
	private static Location log;
	private static int PAGER_LINKS_DEFAULT = 5;
	private static final CellVAlign VERTICAL_ALIGN;
	private int MaxNumberOfRows;
	private int noOfColumns;
	private static IPropertyName DEFAULT_PROP_NAMES[];
	private IPropertyPosition propertiesPositions[];
	private static final String NEXT_LINE_START_COLUMN = "col";
	private static final String NEXT_LINE_METANAME = "metaName";
	private static final String NEXT_LINE_METANAME_MODIFIERS = "metaNameModifiers";
	private boolean debug;
	private boolean isManualOrdered;

	public CollectionListRenderer()
	{
		MaxNumberOfRows = 10;
		noOfColumns = 0;
		debug = false;
		isManualOrdered = false;
		initParameterSettings();
		set508enabled(true);
	}

	private void initParameterSettings()
	{
		IParameterName supportedParameters[] = {
			ICollectionRendererParameterNameConst.BREADCRUMBSTYLE, ICollectionRendererParameterNameConst.BREADCRUMBVISIBILITYSTYLE, ICollectionRendererParameterNameConst.SHOWFOLDERTITLE, ICollectionRendererParameterNameConst.SHOWFILESSTYLE, ICollectionRendererParameterNameConst.SORT_ENABLED, ICollectionRendererParameterNameConst.LINKSSTYLE, ICollectionRendererParameterNameConst.SHOWFOLDERSSTYLE, ICollectionRendererParameterNameConst.SHOW_HIDDEN, ICollectionRendererParameterNameConst.COLUMNS, IResourceRendererParameterNameConst.ICONSTYLE, 
			ICollectionRendererParameterNameConst.ROWS, ICollectionRendererParameterNameConst.ROWSPACING, ICollectionRendererParameterNameConst.COLUMNSPACING, ICollectionRendererParameterNameConst.MASSACTIONSTYLE, ICollectionRendererParameterNameConst.UI_GROUP_MASS, IResourceRendererParameterNameConst.ITEMACTIONSTYLE, ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, ICollectionRendererParameterNameConst.ROWBACKGROUNDSTYLE, ICollectionRendererParameterNameConst.PROPERTYCOLUMNS, ICollectionRendererParameterNameConst.BACKGROUNDIMAGEPATH, 
			ICollectionRendererParameterNameConst.BACKGROUNDIMAGESTYLE, ICollectionRendererParameterNameConst.SORT_PROPERTY, ICollectionRendererParameterNameConst.COMPONENTS, ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, ICollectionRendererParameterNameConst.SORT_ORDER, ICollectionRendererParameterNameConst.COLLECTION_ACTIONSTYLE, ICollectionRendererParameterNameConst.UI_GROUP_COLLECTION, ICollectionRendererParameterNameConst.RESOURCE_LIST_FILTER, ICollectionRendererParameterNameConst.RESIZEHEIGHTSTYLE, ICollectionRendererParameterNameConst.RESIZEWIDHTSTYLE, 
			ICollectionRendererParameterNameConst.FILTEREXTENSION, ICollectionRendererParameterNameConst.FILTERMIMETYPE, ICollectionRendererParameterNameConst.FILTERRESOURCETYPE, IResourceRendererParameterNameConst.UI_GROUP_RESOURCE, ICollectionRendererParameterNameConst.PAGER_LINK_COUNT, ICollectionRendererParameterNameConst.EMPTY_COLLECTION_FILE, ICollectionRendererParameterNameConst.EMPTY_COLLECTION_KEY, ICollectionRendererParameterNameConst.EMPTY_COLLECTION_STYLE
		};
		setSupportedParameters(supportedParameters);
		IParameters parameters = getParameters();
		parameters.setParameter(ICollectionRendererParameterNameConst.BREADCRUMBSTYLE, "horizontal");
		parameters.setParameter(ICollectionRendererParameterNameConst.BREADCRUMBVISIBILITYSTYLE, "standard");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOWFILESSTYLE, "all");
		parameters.setParameter(ICollectionRendererParameterNameConst.LINKSSTYLE, "all");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOWFOLDERSSTYLE, "all");
		parameters.setParameter(ICollectionRendererParameterNameConst.MASSACTIONSTYLE, "off");
		parameters.setParameter(IResourceRendererParameterNameConst.ITEMACTIONSTYLE, "hover");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOWFOLDERTITLE, false);
		parameters.setParameter(ICollectionRendererParameterNameConst.GRIDORDERSTYLE, "columnmajor");
		parameters.setParameter(ICollectionRendererParameterNameConst.ROWS, MaxNumberOfRows);
		parameters.setParameter(ICollectionRendererParameterNameConst.ROWSPACING, 0);
		parameters.setParameter(ICollectionRendererParameterNameConst.SORT_ENABLED, true);
		parameters.setParameter(ICollectionRendererParameterNameConst.COLUMNSPACING, 0);
		parameters.setParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "off");
		parameters.setParameter(ICollectionRendererParameterNameConst.ROWBACKGROUNDSTYLE, "TRANSPARENT");
		parameters.setParameter(ICollectionRendererParameterNameConst.COLLECTION_ACTIONSTYLE, "hover");
		parameters.setParameter(ICollectionRendererParameterNameConst.PROPERTYCOLUMNS, "rnd:icon(noTitle/noColumnSpacing),rnd:displayname(contentLink)");
		parameters.setParameter(ICollectionRendererParameterNameConst.RESOURCE_LIST_FILTER, "default");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOW_HIDDEN, false);
		parameters.setParameter(ICollectionRendererParameterNameConst.RESIZEHEIGHTSTYLE, "compact");
		parameters.setParameter(ICollectionRendererParameterNameConst.RESIZEWIDHTSTYLE, "compact");
		parameters.setParameter(ICollectionRendererParameterNameConst.PAGER_LINK_COUNT, PAGER_LINKS_DEFAULT);
		parameters.setParameter(ICollectionRendererParameterNameConst.EMPTY_COLLECTION_STYLE, "off");
	}

	public int renderListHeader(FormLayout grid, int row)
		throws WcmException
	{
		if(isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off"))
			return row;
		IPropertyPosition position = null;
		IPropertyColumn iterColumns[] = getColumnsList();
		boolean existsResource = getResourceList().size() != 0;
		String propertyHeaderColumnStyle = getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "Table Title Color");
		String headerClassStyle = HtmlRendererUtil.getHeaderClassStyle(propertyHeaderColumnStyle);
		if(headerClassStyle == null)
			headerClassStyle = "";
		FormLayoutCell cell = null;
		if(existsResource)
		{
			cell = grid.addComponent(row, 1, new HTMLFragment(""));
			cell.setStyle(headerClassStyle);
		}
		int rowSpan = 0;
		int columnSpan = 0;
		int line = 1;
		int lineNew = 0;
		int column = 1;
		if(!getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off"))
			column++;
		int startRow = row;
		boolean rowHasTitle = false;
		propertiesPositions = new IPropertyPosition[iterColumns.length];
		PropertyHeaderRenderer sortHeader = new PropertyHeaderRenderer(getProxy(), this, getBundleHandler(), getChildCountMetaName(getParentCollection()), isManualOrdered, getIRS().getSortDefintion(), getResourceContext().getLocale());
		IMetaName metaName = null;
		for(int i = 0; i < iterColumns.length && existsResource; i++)
			if(iterColumns<i> != null)
			{
				rowSpan = 0;
				columnSpan = 0;
				position = PropertyColumnFactory.getInstance().getPosition(iterColumns<i>);
				if(position != null)
				{
					lineNew = position.getRow();
					if(line != lineNew)
					{
						column = position.getColumn();
						if(!getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off"))
							column++;
						line = lineNew;
						if(rowHasTitle)
						{
							row++;
							rowHasTitle = false;
						}
					}
					rowSpan = position.getSpanRow();
					columnSpan = position.getSpanColumn();
				}
				propertiesPositions<i> = PropertyColumnFactory.getInstance().getPropertyPosition(row, rowSpan, column, columnSpan);
				boolean is508Required = false;
				try
				{
					is508Required = getProxy().getDynamicPage().getPageContext().requiresSection508Rendering();
				}
				catch(Exception ex)
				{
					log.errorT("Could not retrieve 508 mode for proxy <" + getProxy() + ">: " + LoggingFormatter.extractCallstack(ex));
				}
				metaName = PropertyHeaderRenderer.getMetaNameForTitle(iterColumns<i>, is508Required);
				if(metaName != null)
					rowHasTitle = true;
				if(!getParameters().getParameter(ICollectionRendererParameterNameConst.SORT_ENABLED, true))
					sortHeader.setSortEnabledParameter(false);
				if(metaName != null)
				{
					if(columnSpan != 0)
					{
						cell = grid.addComponent(row, 1, sortHeader.createSortLink(metaName));
						cell.setColspan(columnSpan);
					} else
					{
						cell = grid.addComponent(row, column, sortHeader.createSortLink(metaName));
					}
					String padding[] = HtmlRendererUtil.getPropertyPaddingValues(iterColumns<i>, metaName);
					cell.setHorizontalAlignment(PropertyColumnFactory.getInstance().getHAlign(iterColumns<i>));
					cell.setVerticalAlignment(PropertyColumnFactory.getInstance().getVAlign(iterColumns<i>));
					if(padding != null)
					{
						cell.setPaddingTop(padding[0]);
						cell.setPaddingRight(padding[1]);
						cell.setPaddingBottom(padding[2]);
						cell.setPaddingLeft(padding[3]);
					}
				}
				column++;
				if(columnSpan != 0)
					column += columnSpan;
				if(!iterColumns<i>.contains("noColumnSpacing") && column < noOfColumns)
				{
					cell = grid.addComponent(row, column, EmptyComponent.render());
					if(!"0".equals(getColumnSpacing()))
						cell.setWidth(getColumnSpacing());
					cell.setVerticalAlignment(VERTICAL_ALIGN);
					column++;
				}
			}

		if(!rowHasTitle)
			row--;
		setClassStyleForm(headerClassStyle, grid, startRow, row, noOfColumns);
		return ++row;
	}

	public int renderListFooter(FormLayout grid, int row)
		throws WcmException
	{
		boolean existsResource = getResourceList().size() != 0;
		if(!isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off"))
		{
			String propertyHeaderColumnStyle = getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "Table Title Color");
			String headerClassStyle = HtmlRendererUtil.getHeaderClassStyle(propertyHeaderColumnStyle);
			if(headerClassStyle == null)
				headerClassStyle = "";
			FormLayoutCell cell = null;
		}
		return row;
	}

	public ILayoutObject getNewInstance()
	{
		return initNewInstance(new CollectionListRenderer());
	}

	private String getChildCountMetaName(IResource res)
		throws WcmException
	{
		if(res == null)
			return null;
		IResourceRenderer resourceRenderer = getRenderer(res);
		String par = resourceRenderer.getParameters().getParameter(IResourceRendererParameterNameConst.SHOWCHILDCOUNTSTYLE);
		if(par == null)
			return null;
		String resultMetaNameID = null;
		if(par.equals("folders/files"))
			resultMetaNameID = "rnd:childcount_both";
		else
		if(par.equals("sum"))
			resultMetaNameID = "rnd:childcount_sum";
		else
		if(par.equals("only files"))
			resultMetaNameID = "rnd:childcount_files";
		else
		if(par.equals("only folders"))
			resultMetaNameID = "rnd:childcount_folders";
		if(resultMetaNameID != null)
		{
			IMetaName metaName = getPropertyConfigurationService().getMetaModel().searchById(resultMetaNameID);
			if(metaName != null)
				return getEncodedSortProperty(metaName);
		}
		return null;
	}

	private String getEncodedSortProperty(IMetaName metaName)
	{
		if(metaName.getComposedOfMetaNames() != null)
		{
			IMetaNameList metaList = metaName.getComposedOfMetaNames();
			if(metaList.contains(metaName))
				return metaName.getId();
			if(metaList.size() == 1)
			{
				IMetaName composedMetaName = metaList.get(0);
				return composedMetaName.getId();
			} else
			{
				return metaName.getId();
			}
		} else
		{
			return metaName.getId();
		}
	}

	public static Vector getIMetaNameTypeText(IPropertyColumn propertyColumn, int col)
	{
		Hashtable metaNameHash = null;
		Vector metaNameVector = null;
		IMetaName currentMetaName = null;
		IPropertyWithModifiersList propertyWithModifiers = propertyColumn.getPropertyWithModifier();
		for(int i = 0; i < propertyWithModifiers.size(); i++)
		{
			currentMetaName = propertyWithModifiers.get(i).getMetaName();
			if(currentMetaName != null && "Text".equals(currentMetaName.getType()) && propertyWithModifiers.size() != 1)
			{
				metaNameHash = new Hashtable();
				metaNameHash.put("metaName", currentMetaName);
				metaNameHash.put("col", Integer.toString(col));
				if(propertyWithModifiers.get(i).getConfigModifierList() != null)
					metaNameHash.put("metaNameModifiers", propertyWithModifiers.get(i));
				if(metaNameVector == null)
					metaNameVector = new Vector();
				metaNameVector.add(metaNameHash);
			}
		}

		return metaNameVector;
	}

	private static boolean[] isNextLineColumnNeeded(IPropertyColumn propertyColumns[])
	{
		boolean result[] = new boolean[propertyColumns.length];
		IMetaName currentMetaName = null;
		for(int j = 0; j < propertyColumns.length; j++)
		{
			IPropertyColumn propertyColumn = propertyColumns[j];
			result[j] = false;
			IPropertyWithModifiersList propertyWithModifiers = propertyColumn.getPropertyWithModifier();
			for(int i = 0; i < propertyWithModifiers.size(); i++)
			{
				currentMetaName = propertyWithModifiers.get(i).getMetaName();
				if(currentMetaName != null && "Text".equals(currentMetaName.getType()) && propertyWithModifiers.size() != 1)
				{
					if(log.beDebug())
						log.debugT("Found meta name <" + currentMetaName + "> in property column <" + propertyColumn + "> that defines we need a new line column");
					result[j] = true;
				}
			}

		}

		return result;
	}

	private IPropertyConfigurationService getPropertyConfigurationService()
		throws WcmException
	{
		return (IPropertyConfigurationService)ResourceFactory.getInstance().getServiceFactory().getService("PropertyConfigurationService");
	}

	public final void setColumnsList(IPropertyColumn list[])
		throws WcmException
	{
		getIRS().setPropertyColumns(list);
	}

	public IPropertyColumn[] getColumnsList()
		throws WcmException
	{
		return getIRS().getPropertyColumns();
	}

	private IPropertyColumn[] createCollectionColumns()
	{
		String columnsString = getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTYCOLUMNS, "rnd:icon(noTitle/noColumnSpacing),rnd:displayname(contentLink)");
		return PropertyColumnFactory.getInstance().parseProperty(columnsString);
	}

	public Component renderUI()
		throws WcmException
	{
		s_profiler.start("/KM/FLEXUI/RENDER/UI", com.sapportals.wcm.util.profiler.IProfiler.Level.MEDIUM);
		try
		{
			if(getProxy().isDebugEnabled())
				writeDebugInformation();
			setColumnsList(createCollectionColumns());
			FormLayout grid = new FormLayout();
			grid.setMargin("0", "0", "0", "0");
			grid.setWidth("");			
			FormLayoutCell cell = null;
			grid.setDebugMode(debug);
			int row = 1;
			
			grid.addComponent(++row, 1, new TextView("CH-BOVENALL"));
			
			if(!isVisible())
			{
				FormLayout formlayout = grid;
				return formlayout;
			}
			if(getParameter(ICollectionRendererParameterNameConst.SHOWFOLDERTITLE, false))
			{
				cell = grid.addComponent(row, 1, renderFolderTitle());
				cell.setColspan(10);
				cell.setPaddingTop("2");
				cell.setPaddingBottom("3");
				row++;
			}
			IResourceList resourcelist = getResourceList();
			if(!getParameters().isExactlyValue(ICollectionRendererParameterNameConst.EMPTY_COLLECTION_STYLE, "off") && resourcelist != null && resourcelist.size() == 0)
			{
				cell = grid.addComponent(row, 1, new EmptyCollectionInfo(getProxy(), getParameters()));
				cell.setColspan(10);
				cell.setHorizontalAlignment(CellHAlign.LEFT);
				row++;
			}
			noOfColumns = PropertyColumnFactory.getNoOfColumn(getColumnsList(), MaxNumberOfRows);
			int column = 1;
			if(!getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off"))
			{
				column++;
				noOfColumns++;
			}
			if(getParentCollection() != null)
			{
				FolderSettings currFolderSettings = new FolderSettings(getParentCollection());
				isManualOrdered = currFolderSettings.getOrderedFlag();
			}
			row = renderListHeader(grid, row);
			boolean widthStrech = getParameters().getParameter(ICollectionRendererParameterNameConst.RESIZEWIDHTSTYLE, "compact").equals("stretch");
			boolean heightStrech = getParameters().getParameter(ICollectionRendererParameterNameConst.RESIZEHEIGHTSTYLE, "compact").equals("stretch");
			int maxnumberOfElements = getStartRow() + getParameters().getParameter(ICollectionRendererParameterNameConst.ROWS, MaxNumberOfRows);
			if(maxnumberOfElements > resourcelist.size())
				maxnumberOfElements = resourcelist.size();
			int rowHeightPercent = 0;
			if(heightStrech && maxnumberOfElements != 0)
				rowHeightPercent = 100 / maxnumberOfElements;
			IResourceList renderlist = resourcelist.subList(getStartRow(), maxnumberOfElements);
			IResourceListIterator iter = renderlist.listIterator();
			IResource res = null;
			boolean lightStyleClass = true;
			String classStyle = "";
			boolean alternatingMode = isExactlyValue(ICollectionRendererParameterNameConst.ROWBACKGROUNDSTYLE, "ALTERNATING");
			boolean lineSeparatedMode = isExactlyValue(ICollectionRendererParameterNameConst.ROWBACKGROUNDSTYLE, "LINE_SEPARATED");
			if(alternatingMode || lineSeparatedMode)
			{
				grid.addComponent(row, 1, HtmlRendererUtil.importStyles());
				row++;
			}
			if(getColumnsList() != null)
			{
				IPropertyNameList propertynamelist = PropertyColumnFactory.getInstance().getPropertyNameList(getColumnsList());
				for(int i = 0; i < DEFAULT_PROP_NAMES.length; i++)
					if(DEFAULT_PROP_NAMES<i> != null)
						propertynamelist.add(DEFAULT_PROP_NAMES<i>);

				s_profiler.start("/KM/FLEXUI/RENDER/UI/GETPROPS", com.sapportals.wcm.util.profiler.IProfiler.Level.MEDIUM);
				try
				{
					getProxy().getAmalgamation().readProperties(renderlist, propertynamelist);
				}
				finally
				{
					s_profiler.stop("/KM/FLEXUI/RENDER/UI/GETPROPS");
				}
				IPropertyPosition positions[] = getPositionArray(getColumnsList());
				boolean nextColumns[] = isNextLineColumnNeeded(getColumnsList());
				boolean selectionActive = !getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off");
				List paddings = getPaddingList(getColumnsList(), selectionActive);
				while(iter.hasNext()) 
				{
					res = iter.next();
					if(alternatingMode)
					{
						classStyle = "urCellBgPlain";
						if(!lightStyleClass)
							classStyle = "urSTbvCellAlt";
					}
					row = renderFormRow(grid, row, 1, res, classStyle, rowHeightPercent, propertynamelist, positions, nextColumns, paddings);
					if(lineSeparatedMode && iter.hasNext())
					{
						cell = grid.addComponent(row, 1, HtmlRendererUtil.renderLineSeparator("urCellBgPlain", 1));
						cell.setColspan(noOfColumns);
						row++;
					}
					lightStyleClass = !lightStyleClass;
				}
			}
			row = renderListFooter(grid, row);
			if(widthStrech)
				grid.setWidth("100%");
			FormLayout formlayout1 = grid;
			
			IParameters parameters = getParameters();
			formlayout1.addComponent(++row, 1, new TextView("CH-BOVEN "+parameters.getParameter(IParameterName.PAGER_LINK_COUNT).toString()));
			
			return formlayout1;
		}
		catch(Exception ex)
		{
			throw new WcmException(ex);
		}
		finally
		{
			s_profiler.stop("/KM/FLEXUI/RENDER/UI");
		}
	}

	private static List getPaddingList(IPropertyColumn columnsList[], boolean selectionActive)
	{
		List result = new ArrayList();
		for(int i = 0; i < columnsList.length; i++)
		{
			String padding[] = null;
			try
			{
				padding = PropertyColumnRenderer.getPropertyColumnArrayPadding(columnsList<i>, selectionActive);
			}
			catch(WdfException e)
			{
				log.errorT("Could not parse padding for column <" + columnsList<i> + "> " + LoggingFormatter.beautify(e));
				padding = (new String[] {
					"0", "0", "0", "0"
				});
			}
			result.add(padding);
		}

		return result;
	}

	private static IPropertyPosition[] getPositionArray(IPropertyColumn columns[])
	{
		IPropertyPosition result[] = new IPropertyPosition[columns.length];
		for(int i = 0; i < columns.length; i++)
			result<i> = PropertyColumnFactory.getInstance().getPosition(columns<i>);

		if(log.beDebug())
			log.debugT("Calculated property position array <" + result + "> for property column array <" + columns + ">");
		return result;
	}

	private int renderFormRow(FormLayout grid, int row, int column, IResource res, String classStyle, int rowHeightPercent, IPropertyNameList propertynamelist, 
			IPropertyPosition positions[], boolean nextColumns[], List paddings)
		throws WcmException
	{
		s_profiler.start("/KM/FLEXUI/RENDER/UI/ROW ", com.sapportals.wcm.util.profiler.IProfiler.Level.MEDIUM);
		try
		{
			boolean emptyRow = true;
			try
			{
				Vector nextLine = new Vector();
				Vector nextLineColumn = new Vector();
				Hashtable nextLineElement = new Hashtable();
				FormLayoutCell cell = null;
				int nextLineCol = 0;
				int line = 1;
				int startRow = row;
				boolean selectionActive = false;
				IPropertyPosition position = null;
				IResourceRenderer renderer = getRenderer(res);
				renderer.setPropertyNameList(propertynamelist);
				String padding[] = null;
				Component comp = new HTMLFragment(" ");
				if(!getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off"))
				{
					comp = renderItemSelectionMode(res);
					cell = grid.addComponent(row, column, comp);
					cell.setVerticalAlignment(VERTICAL_ALIGN);
					cell.setPaddingRight("2");
					cell.setPaddingLeft("3");
					selectionActive = true;
					column++;
				}
				int columnSpan = 0;
				int rowSpan = 0;
				IMetaName metaName = null;
				for(int i = 0; i < getColumnsList().length; i++)
				{
					try
					{
						columnSpan = 0;
						position = positions<i>;
						if(position != null)
						{
							int lineNew = position.getRow();
							if(line != lineNew)
							{
								column = position.getColumn();
								if(!getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off"))
									column++;
								line = lineNew;
								if(!emptyRow)
									row++;
								emptyRow = true;
							}
							columnSpan = position.getSpanColumn();
							rowSpan = position.getSpanRow();
						}
						comp = PropertyColumnRenderer.renderPropertyColumn(renderer, res, getColumnsList()<i>, false, getProxy());
						emptyRow = emptyRow && (comp == null || (comp instanceof EmptyComponent));
						if(comp != null)
						{
							if(columnSpan != 0)
							{
								cell = grid.addComponent(row, column, comp);
								cell.setColspan(columnSpan);
							} else
							{
								cell = grid.addComponent(row, column, comp);
							}
							if(rowSpan != 0)
								cell.setRowspan(rowSpan);
							cell.setVerticalAlignment(PropertyColumnFactory.getInstance().getVAlign(getColumnsList()<i>));
							cell.setHorizontalAlignment(PropertyColumnFactory.getInstance().getHAlign(getColumnsList()<i>));
							padding = (String[])paddings.get(i);
							if(padding != null)
							{
								cell.setPaddingTop(padding[0]);
								cell.setPaddingRight(padding[1]);
								cell.setPaddingBottom(padding[2]);
								cell.setPaddingLeft(padding[3]);
							}
							selectionActive = false;
						}
						if(nextColumns<i>)
						{
							nextLineColumn = getIMetaNameTypeText(getColumnsList()<i>, column);
							nextLine.addAll(nextLineColumn);
						}
						column++;
					}
					catch(WcmException wcmEx)
					{
						log.debugT("Could not rendere row for resource <" + res + "> & columns <" + getColumnsList()<i> + ">" + LoggingFormatter.extractCallstack(wcmEx));
						if(columnSpan != 0)
						{
							cell = grid.addComponent(row, column, EmptyComponent.render());
							cell.setColspan(columnSpan);
						} else
						{
							cell = grid.addComponent(row, column, EmptyComponent.render());
						}
						column++;
					}
					if(columnSpan != 0)
						column += columnSpan;
					if(!getColumnsList()<i>.contains("noColumnSpacing") && column < noOfColumns)
					{
						cell = grid.addComponent(row, column, EmptyComponent.render());
						if(!"0".equals(getColumnSpacing()))
							cell.setWidth(getColumnSpacing());
						column++;
					}
				}

				boolean emptyComponent = true;
				for(int k = 0; k < nextLine.size(); k++)
				{
					nextLineElement = (Hashtable)nextLine.elementAt(k);
					if(nextLineElement != null)
					{
						IPropertyWithModifiers currProp = (IPropertyWithModifiers)nextLineElement.get("metaNameModifiers");
						nextLineCol = Integer.parseInt((String)nextLineElement.get("col"));
						metaName = (IMetaName)nextLineElement.get("metaName");
						renderer.getParameters().setParameter(IResourceRendererParameterNameConst.PROPERTY_MODIFIERS, PropertyColumnFactory.getInstance().getModifierString(currProp.getModifierList()));
						comp = PropertyColumnRenderer.renderMetaProperty(renderer, metaName, false, true);
						emptyComponent = false;
						if(comp != null && (comp instanceof EmptyComponent))
							emptyComponent = true;
						if(!emptyComponent)
						{
							if(!emptyRow)
								row++;
							cell = grid.addComponent(row, nextLineCol, comp);
							cell.setColspan(column);
							emptyRow = false;
						}
					}
				}

				int rowSpace = 0;
				try
				{
					rowSpace = Integer.parseInt(getRowSpacing());
				}
				catch(NumberFormatException nfEx)
				{
					log.debugT("Could not get an Integer from <" + getRowSpacing() + ">; " + LoggingFormatter.extractCallstack(nfEx));
					rowSpace = 0;
				}
				int endRow = row;
				if(emptyRow)
					endRow = row - 1;
				if(rowSpace != 0)
				{
					String paddingStyle = String.valueOf(rowSpace);
					if(startRow != endRow)
					{
						setHeightPercentageForm(rowHeightPercent, paddingStyle, 1, grid, startRow, noOfColumns);
						setHeightPercentageForm(rowHeightPercent, paddingStyle, 1, grid, endRow, noOfColumns);
					} else
					{
						setHeightPercentageForm(rowHeightPercent, paddingStyle, 0, grid, endRow, noOfColumns);
					}
				}
				if(!"".equals(classStyle))
					setClassStyleForm(classStyle, grid, startRow, row, noOfColumns);
			}
			catch(Exception e)
			{
				throw new WcmException(e);
			}
			if(!emptyRow)
				row++;
		}
		finally
		{
			s_profiler.stop("/KM/FLEXUI/RENDER/UI/ROW ");
		}
		
		return row;
	}

	private void setHeightPercentageForm(int rowHeightPercent, String padding, int paddingStyle, FormLayout grid, int row, int col)
	{
		FormLayoutCell cell = null;
		FormLayoutRow rows = grid.getRow(row);
		for(int j = 1; j <= col; j++)
		{
			cell = rows.getCell(j);
			if(cell != null)
			{
				if(rowHeightPercent != 0)
					cell.setWidth(""";height="" + String.valueOf(rowHeightPercent) + "%"");
				if(paddingStyle == 1)
					cell.setPaddingTop(padding);
				else
				if(paddingStyle == -1)
				{
					cell.setPaddingBottom(padding);
				} else
				{
					cell.setPaddingTop(padding);
					cell.setPaddingBottom(padding);
				}
			}
		}

	}

	private void setClassStyleForm(String classStyle, FormLayout grid, int startRow, int endRow, int col)
	{
		FormLayoutCell cell = null;
		FormLayoutRow currentRow = null;
		int rowSpan = 0;
		int noCol = col;
		boolean hasRowSpan = false;
		for(int i = startRow; i <= endRow; i++)
		{
			currentRow = grid.getRow(i);
			if(currentRow != null)
			{
				if(hasRowSpan)
				{
					noCol = col - 1;
					hasRowSpan = --rowSpan > 0;
				} else
				{
					noCol = col;
				}
				for(int j = 1; j <= noCol; j++)
				{
					cell = currentRow.getCell(j);
					if(cell != null && cell.getRowspan() > 1)
					{
						hasRowSpan = true;
						rowSpan = cell.getRowspan() - 1;
					}
					if(cell != null)
					{
						cell.setStyle(classStyle);
					} else
					{
						cell = grid.addComponent(i, j, EmptyComponent.render());
						cell.setStyle(classStyle);
					}
				}

			}
		}

	}

	public HeaderItem[][] genetateMatrixHeader()
		throws WcmException
	{
		if(isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off"))
			return null;
		IPropertyPosition position = null;
		IPropertyColumn iterColumns[] = getColumnsList();
		boolean existsResource = getResourceList().size() != 0;
		if(!existsResource)
			return null;
		HeaderItem headerMatrix[][] = new HeaderItem[10][20];
		int currentRow = 0;
		int currentColumn = 0;
		int currentRowSpan = 0;
		int currentColumnSpan = 0;
		int nextCol = 0;
		int maxRow = 0;
		int maxCol = 0;
		boolean is508Required = false;
		try
		{
			is508Required = getProxy().getDynamicPage().getPageContext().requiresSection508Rendering();
		}
		catch(Exception ex)
		{
			log.errorT("Could not retrieve 508 mode for proxy <" + getProxy() + ">: " + LoggingFormatter.extractCallstack(ex));
		}
		IMetaName metaName = null;
		for(int i = 0; i < iterColumns.length && existsResource; i++)
		{
			if(iterColumns<i> != null)
			{
				position = PropertyColumnFactory.getInstance().getPosition(iterColumns<i>);
				if(position != null)
				{
					if(currentRow != position.getRow() - 1)
						nextCol = 0;
					currentRow = position.getRow() - 1;
					currentColumn = (position.getColumn() - 1) + nextCol;
					currentRowSpan = position.getSpanRow();
					currentColumnSpan = position.getSpanColumn();
				} else
				{
					currentRowSpan = 0;
					currentColumnSpan = 0;
				}
			}
			metaName = PropertyHeaderRenderer.getMetaNameForTitle(iterColumns<i>, is508Required);
			if(metaName != null)
			{
				headerMatrix[currentRow][currentColumn] = new HeaderItem(currentRowSpan, currentColumnSpan, metaName, iterColumns<i>);
				nextCol = 1;
				maxRow = maxRow <= currentRow ? currentRow : maxRow;
				maxCol = maxCol <= currentColumn ? currentColumn : maxCol;
			}
			currentColumn++;
			if(currentColumnSpan != 0)
				currentColumn += currentColumnSpan;
			if(!iterColumns<i>.contains("noColumnSpacing"))
				currentColumn++;
		}

		maxRow++;
		maxCol++;
		if(maxRow > 0 || maxCol > 0)
		{
			HeaderItem resultMatrix[][] = new HeaderItem[maxRow][maxCol];
			for(int i = 0; i < maxRow; i++)
			{
				for(int k = 0; k < maxCol; k++)
					resultMatrix<i>[k] = headerMatrix<i>[k];

			}

			return resultMatrix;
		} else
		{
			return null;
		}
	}

	public int renderListHeader1(FormLayout grid, int row)
		throws WcmException
	{
		if(isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off"))
			return row;
		HeaderItem header[][] = genetateMatrixHeader();
		if(header == null)
			return row;
		String propertyHeaderColumnStyle = getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "Table Title Color");
		String headerClassStyle = HtmlRendererUtil.getHeaderClassStyle(propertyHeaderColumnStyle);
		if(headerClassStyle == null)
			headerClassStyle = "";
		FormLayoutCell cell = null;
		int columnSpan = 0;
		int column = 1;
		if(!getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off"))
			column++;
		int startRow = row;
		HeaderItem headerItem = null;
		PropertyHeaderRenderer sortHeader = new PropertyHeaderRenderer(getProxy(), this, getBundleHandler(), getChildCountMetaName(getParentCollection()), isManualOrdered, getIRS().getSortDefintion(), getResourceContext().getLocale());
		IMetaName metaName = null;
		int colHeader = 0;
		for(int i = 0; i < header.length; i++)
		{
			row += i;
			if(!getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off"))
				colHeader = 1;
			else
				colHeader = 0;
			for(int k = 0; k < header[0].length; k++)
			{
				headerItem = header<i>[k];
				if(headerItem != null)
				{
					boolean is508Required = false;
					try
					{
						is508Required = getProxy().getDynamicPage().getPageContext().requiresSection508Rendering();
					}
					catch(Exception ex)
					{
						log.errorT("Could not retrieve 508 mode for proxy <" + getProxy() + ">: " + LoggingFormatter.extractCallstack(ex));
					}
					metaName = headerItem.getLabelMetaName();
					if(headerItem.getColSpan() != 0)
					{
						cell = grid.addComponent(row, k + colHeader + 1, sortHeader.createSortLink(metaName));
						cell.setColspan(headerItem.getColSpan());
					} else
					{
						cell = grid.addComponent(row, k + colHeader + 1, sortHeader.createSortLink(metaName));
					}
					String padding[] = HtmlRendererUtil.getPropertyPaddingValues(headerItem.getPropertyColumn(), metaName);
					cell.setHorizontalAlignment(PropertyColumnFactory.getInstance().getHAlign(headerItem.getPropertyColumn()));
					cell.setVerticalAlignment(PropertyColumnFactory.getInstance().getVAlign(headerItem.getPropertyColumn()));
					if(padding != null)
					{
						cell.setPaddingTop(padding[0]);
						cell.setPaddingRight(padding[1]);
						cell.setPaddingBottom(padding[2]);
						cell.setPaddingLeft(padding[3]);
					}
					if(columnSpan != 0)
						colHeader += columnSpan;
				}
			}

		}

		setClassStyleForm(headerClassStyle, grid, startRow, row, noOfColumns);
		return ++row;
	}

	static Class _mthclass$(String x0)
	{
		try
		{
			return Class.forName(x0);
		}
		catch(ClassNotFoundException x1)
		{
			throw new NoClassDefFoundError(x1.getMessage());
		}
	}

	static 
	{
		log = Location.getLocation((be.kindengezin.wcm.rendering.collection.cm.CollectionListRenderer.class).getName());
		VERTICAL_ALIGN = HtmlRendererUtil.FLEXUI_VERTICAL_ALIGN;
		DEFAULT_PROP_NAMES = new PropertyName[3];
		try
		{
			DEFAULT_PROP_NAMES[0] = PropertyName.getPN("http://sapportals.com/xmlns/cm", "readonly");
			DEFAULT_PROP_NAMES[1] = PropertyName.createCreatedBy();
			DEFAULT_PROP_NAMES[2] = PropertyName.createLastModifiedBy();
		}
		catch(ResourceException e)
		{
			log.errorT("Could not set default property name" + LoggingFormatter.beautify(e));
		}
	}
}

Accepted Solutions (0)

Answers (1)

Answers (1)

0 Kudos

Hi,

The codes that render the PagerComponent are in renderDecorations method of LightCollectionRenderer.

So override this method and implement your own pager.

Implementation is not so straight forward, so look into the codes and let me know if you need more help.

Also check this:

https://forums.sdn.sap.com/thread.jspa?threadID=838233

Regards,

Praveen Gudapati

Former Member
0 Kudos

Hello

This was my first thought where it had to be done. So I already have the decompiled files. But I can't seem to find where it is exactly done in this CollectionRendererDecorator, the constructor which is called in the renderDecorations method of LightCollectionRenderer.


	protected Component renderDecorations(Component comp)
		throws WcmException
	{
		return new CollectionRendererDecorator(comp, this, getProxy(), getComponentValueMap(), getParentCollection());
	}

I'll have a try, but any help would be really nice and I would be really gratefull!

Christof

Former Member
0 Kudos

Hello

Ok, I got the pagerData. Here, you find the number of items, the items per page, the startrow, number of links (don't know what this is) and a boolean for the 'more' modus, the others are all integers.

But now, I'm wondering how to make links to show the following page with items. Any idea?

Christof

Former Member
0 Kudos

The StartRow is used to tell the rendere where to start.

So you got a list of 23 items and 15 items at each page gives the following:

15 items

1-15 15-23

and startrow = 0

8 items

1-15 15-23

and startrow = 15

Am I going in the rigth direction, by trying to set this startrow? Or do I need to fire events or?

Somebody got an idea about where setting it?

Christof

0 Kudos

Hi,

I just wrote a document with step involved in creating a custom pager component.

Email me so that I can share this with you.

Regards,

Praveen Gudapati

Former Member
0 Kudos

Mail has been sent!

Thanks in advance!!!

Christof

Former Member
0 Kudos

Hello

I still seem to have a problem. I think I got to change stuff in the renderIntervalLinks method of 'KenGPager'. But it doesn't matter what I change, he always shows the standard numbers..

This is what I did.

I created a methode renderDecorations in the class CollectionListRenderer. (I'm sure he uses this method, because if I add more components, they are shown )


	protected Component renderDecorations(Component comp)
	{
		int col = 1;
		int row = 1;
		GridLayout grid = new GridLayout();
		Container container = grid;

		try
		{
			grid.addComponent(row, col, new KenGCollectionRendererDecorator(comp, this, getProxy(), getComponentValueMap(), getParentCollection()));
		}
		catch (WcmException e2)
		{
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		return container;
	}

As you see, I use the class KenGCollectionRendererDecorator.

I created the class and changed the method to use my pager, using the alias:


	private Component renderPager()
		throws WcmException
	{
		IComponent comp = ComponentFactory.getInstance().getComponent("KenGPager", proxy, renderer, resource, null);
		if(comp == null)
		{
			return EmptyHtmlFragment.render();
		} else
		{
			comp.setData(valueMap);
			return comp.render();
		}
	}

The pager references to KenGPager.


Mapping -> Component: 
KenGPager be.kindengezin.wcm.rendering.component.cm.KenGPager 

Do you see anything wrong?

Christof

0 Kudos

Hi,

Did you restart the server after deploying your application?

Also add some logging into code so that you can debug what is going wrong.

Add logging in renderDecorations method as well as in KenGCollectionRendererDecorator class as well as other custom classes.

If the debug mode is enabled on your server then you can also debug using break points in codes using NWDS.

Regards,

Praveen Gudapati

Former Member
0 Kudos

Hello

My problem is the following on the moment:

In debug, I get the message the pager can't be created.


Could not create command with alias KenGPager and classname be.kindengezin.wcm.rendering.component.cm.Pager:java.lang.ClassNotFoundException: be.kindengezin.wcm.rendering.component.cm.Pager
	at com.sapportals.wcm.crt.CrtClassLoaderRegistry.findClass(CrtClassLoaderRegistry.java:176)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
	at com.sapportals.wcm.rendering.collection.ComponentFactory.createComponent(ComponentFactory.java:447)
	at com.sapportals.wcm.rendering.collection.ComponentFactory.initialize(ComponentFactory.java:489)
	at com.sapportals.wcm.rendering.collection.ComponentFactory.configEvent(ComponentFactory.java:553)
	at com.sapportals.config.event.ConfigEventService.dispatchEvent(ConfigEventService.java:227)
	at com.sapportals.config.event.ConfigEventService.configEvent(ConfigEventService.java:112)
	at com.sapportals.config.event.ConfigEventDispatcher.callConfigListeners(ConfigEventDispatcher.java:308)
	at com.sapportals.config.event.ConfigEventDispatcher.flushEvents(ConfigEventDispatcher.java:251)
	at com.sapportals.config.event.ConfigEventDispatcher.run(ConfigEventDispatcher.java:110)

My java files start as following:


package be.kindengezin.wcm.rendering.component.cm;

import com.sap.tc.logging.Location;
import com.sapportals.htmlb.*;
import com.sapportals.htmlb.enum.TextViewDesign;
import com.sapportals.htmlb.event.Event;
import com.sapportals.wcm.WcmException;
import com.sapportals.wcm.control.util.PropertyRendererString;
import com.sapportals.wcm.rendering.base.*;
import com.sapportals.wcm.rendering.collection.*;
import com.sapportals.wcm.rendering.util.EmptyHtmlFragment;
import com.sapportals.wcm.rendering.util.PagerData;
import com.sapportals.wcm.repository.*;
import com.sapportals.wcm.repository.service.IRepositoryServiceFactory;
import com.sapportals.wcm.repository.service.layout.customizing.IParameterName;
import com.sapportals.wcm.service.propertyconfig.*;
import com.sapportals.wcm.util.logging.LoggingFormatter;
import com.sapportals.wcm.util.name.IName;
import com.sapportals.wcm.util.resource.ResourceBundles;
import com.sapportals.wcm.util.uri.RID;
import java.util.*;

// Referenced classes of package com.sapportals.wcm.rendering.component.cm:
//			  LightComponent, PagerComponent, PagerInterval

public class Pager extends LightComponent
{

Edited by: Christof Houben on Oct 6, 2008 3:44 PM

0 Kudos

Hi,

Check that the SharingReferences are properly set.

If CrtClassLoader does not find your classes then it is most probably due to SharingReferences problems.

Regards,

Praveen Gudapati

Former Member
0 Kudos

Hello

Thanks for the response.

I got 3 libs I don't know what to do with. Htmlb.jar, servlet.jar and logging.jar. I used servlet.jar in mij collection renderer and this one works as long as I don't call the KenGPager (there is an error on this pager: ClassNotFoundException). Htmlb is used through htmlb. But the other 2 I don't know how to handle them.

The servlet.jar isn't mentioned in my portalapp.xml of the CollectionListRenderer.

I added one missing reference in the SharingRefences, but I still get the same error. Other ideas?

Christof

0 Kudos

Hi,

Did you restart server after adding missing SharingReference?

Regards,

Praveen Gudapati

Former Member
0 Kudos

Hello

Not yet, because some others are working on the server for the moment...

But crt Classloader is loading everything after you add mapping. (I noticed this in nwa -> logs).

Christof

0 Kudos

Hi,

I have now also blogged the document I sent you for creating custom pager component:

https://weblogs.sdn.sap.com/pub/wlg/11248

Regards,

Praveen Gudapati

Former Member
0 Kudos

Hello

I restarted the server (it's today finally whole mine) and saw the collection renderer and Pager both get the java.lang.ClassNotFoundException exception. But still can't figure out why they can't be found, because they exist.

Christof