[jbossseam-issues] [JBoss JIRA] Created: (JBSEAM-3275) ClassCastException when rendering JSF page after long running query

Giovanni Cosmiano (JIRA) jira-events at lists.jboss.org
Sun Aug 17 19:41:58 EDT 2008


ClassCastException when rendering JSF page after long running query
-------------------------------------------------------------------

                 Key: JBSEAM-3275
                 URL: https://jira.jboss.org/jira/browse/JBSEAM-3275
             Project: Seam
          Issue Type: Bug
          Components: EL
    Affects Versions: 2.0.1.GA
         Environment: JBoss 4.2.2GA, Seam 2.0.1GA, Richfaces 3.2.1
            Reporter: Giovanni Cosmiano


Hello,

I'm getting this ClassCastException error after a long running query in which works just fine when querying subset data. It doesn't seem to appear as TM is timing out so I'm not sure what's happening but seems that during JSF rendering cycle it couldn't find the right object when referencing it thru EL or it found it from the wrong classloader context. Any help would be appreciated.

Thanks, Gio

2008-08-16 17:45:02,953 ERROR [STDERR] Aug 16, 2008 5:45:02 PM com.sun.facelets.FaceletViewHandler handleRenderException
SEVERE: Error Rendering View[/queries/QuerySupervisorPercentToPlanReport.xhtml]
javax.el.ELException: Error reading 'dataModelPagination' on type org.javassist.tmp.java.lang.Object_$$_javassist_15
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:66)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
	at org.jboss.el.parser.AstPropertySuffix.getValue(AstPropertySuffix.java:53)
	at org.jboss.el.parser.AstValue.getValue(AstValue.java:67)
	at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	at org.jboss.seam.core.Expressions$1.getValue(Expressions.java:111)
	at org.jboss.seam.navigation.Param.getStringValueFromModel(Param.java:133)
	at org.jboss.seam.navigation.Pages.getStringValuesFromModel(Pages.java:690)
	at org.jboss.seam.ui.component.UISeamCommandBase.getUrl(UISeamCommandBase.java:51)
	at org.jboss.seam.ui.renderkit.LinkRendererBase.doEncodeBegin(LinkRendererBase.java:26)
	at org.jboss.seam.ui.util.cdk.RendererBase.encodeBegin(RendererBase.java:79)
	at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:788)
	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:280)
	at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
	at org.richfaces.renderkit.html.MenuItemRenderer.doEncodeEnd(MenuItemRenderer.java:269)
	at org.richfaces.renderkit.html.MenuItemRenderer.doEncodeEnd(MenuItemRenderer.java:288)
	at org.ajax4jsf.renderkit.RendererBase.encodeEnd(RendererBase.java:135)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:286)
	at org.richfaces.renderkit.html.AbstractMenuRenderer.encodeItems(AbstractMenuRenderer.java:185)
	at org.richfaces.renderkit.html.AbstractMenuRenderer.processLayer(AbstractMenuRenderer.java:152)
	at org.richfaces.renderkit.html.AbstractMenuRenderer.encodeChildren(AbstractMenuRenderer.java:134)
	at org.richfaces.renderkit.html.DropDownMenuRendererBase.encodeChildren(DropDownMenuRendererBase.java:115)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
	at org.richfaces.renderkit.html.ToolBarGroupRenderer.encodeChildren(ToolBarGroupRenderer.java:81)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
	at org.richfaces.renderkit.html.ToolBarRendererBase.encodeChildren(ToolBarRendererBase.java:104)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
	at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493)
	at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassCastException: com.czncorp.cap.ccst.util.DataModelPagination
	at $Proxy256.getDataModelPagination(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor788.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
	at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31)
	at org.jboss.seam.intercept.ClientSideInterceptor$1.proceed(ClientSideInterceptor.java:76)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
	at org.jboss.seam.ejb.RemoveInterceptor.aroundInvoke(RemoveInterceptor.java:41)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
	at org.jboss.seam.intercept.ClientSideInterceptor.invoke(ClientSideInterceptor.java:54)
	at org.javassist.tmp.java.lang.Object_$$_javassist_15.getDataModelPagination(Object_$$_javassist_15.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccess
2008-08-16 17:45:02,960 ERROR [STDERR] orImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	... 81 more

<code>DataModelPagination class </code>
package com.czncorp.cap.ccst.util;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.DataModel;

import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.jsf.ListDataModel;

import com.czncorp.cap.ccst.Constants;

public class DataModelPagination<T>
		implements java.io.Serializable {
	
	protected int pageSize = 0;
	protected int pageNumber = 0;
	protected int totalPages = 0;
	protected int totalRecords = 0;
	protected List<T> dataList = null;
	protected List<T> currentList = null;
	protected String componentName = null;
	protected DataModel dataModel = null;
	private boolean firstLoad = false;
	
	public DataModelPagination() {
	}
	
	public List<T> getDataList() {
		return dataList;
	}
	
	public void setDataList(List<T> dataList) {
		this.dataList = dataList;
	}
	
	public T getSelectedDataRow() {
		DataModel dm = (ListDataModel)Contexts.getConversationContext().get(componentName);
		return (T)dm.getRowData();
	}
	
	public T getSelectedDataFromDataModel() {
		return (dataModel == null ? null : (T)dataModel.getRowData());
	}

	/*
	 * Check for firstLoad because of multiple calls to this method
	 * due to dataModelPagination.currentPage references in JSF pages
	 * such as 1st, next, previous, last and if empty
	 * 
	 * firstLoad is always set to true every time the first page is loaded
	 * or going to a new page via next, previous, first or last page links
	 * 
	 * Also, for some reason, the row selected from dataModel is not being
	 * returned to client using the method above,
	 * getDataModel().getSelectedDataFromDataModel(), but works
	 * just fine when its being managed by seam so I'm putting the dataModel
	 * on the conversational context then reference it from JSF pages as
	 * #{dmMaintainEntity} or #{dmQueryEntity} as oppose to referencing it
	 * using #{dataModelPagination.dataModel} ==> Gio Cosmiano
	 * 
	 */
	public List<T> getCurrentPage() {
		if (isFirstLoad()) {
	  		setFirstLoad(false);
			dataModel = null;
			currentList = getPagedData();
			if (currentList != null && currentList.size() > 0) {
				dataModel = new ListDataModel(currentList);
				Contexts.getConversationContext().set(componentName, dataModel);
			}
		}
		return currentList;
	}
	
	private List<T> getPagedData() {
		
		List<T> temp = null;
		List<T> list = null;
		
		if (dataList != null && dataList.size() > 0) {
			temp = new ArrayList<T>();
			list = new ArrayList<T>();
			if (isLastPageAvailable()) {
				temp = dataList.subList((pageNumber * pageSize), (pageNumber * pageSize) + pageSize);
			} else {
				temp = dataList.subList((pageNumber * pageSize), totalRecords);
			}
			/*
			 * List.subList returns a non-serializable objects so I'm dumping them
			 * to a temporary storage before returning them to clients 
			 * http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4114571#4114571
			 */
			if (temp != null && temp.size() > 0) {
				list.addAll(temp);
			}
		}
		
		return list;
	}

	public void setPaginationSettings(List<T> list) {
		setPaginationSettings(list, Constants.DEFAULT_MAX_PAGE_SIZE, Constants.ENTITY_DATA_MODEL);
	}

	public void setPaginationSettings(List<T> list, int maxPageSize) {
		setPaginationSettings(list, maxPageSize, Constants.ENTITY_DATA_MODEL);
	}

	public void setPaginationSettings(List<T> list, String componentName) {
		setPaginationSettings(list, Constants.DEFAULT_MAX_PAGE_SIZE, componentName);
	}

	public void setPaginationSettings(List<T> list, int pageSize, String componentName) {
		setPageSize(pageSize);
		setComponentName(componentName);
		pageNumber = 0;
		totalPages = 0;
		totalRecords = 0;
		dataList = list;
  		if (dataList != null && dataList.size() > 0) {
  			totalRecords = dataList.size();
  			totalPages = dataList.size() / this.pageSize;
  			if (this.pageSize > 0 && totalRecords % this.pageSize > 0)
  				totalPages++;
  			if (totalPages > 0)
  				totalPages--; // decrement by 1 for 0 based indexing
  		}
  		setFirstLoad(true);
  		getCurrentPage();
	}

	public void resetPaginationSize(int pageSize) {
		setPageSize(pageSize);
		pageNumber = 0;
		totalPages = 0;
  		if (dataList != null && dataList.size() > 0) {
  			totalPages = dataList.size() / this.pageSize;
  			if (this.pageSize > 0 && totalRecords % this.pageSize > 0)
  				totalPages++;
  			if (totalPages > 0)
  				totalPages--; // decrement by 1 for 0 based indexing
  		}
  		setFirstLoad(true);
  		getCurrentPage();
	}
	
	public boolean isNextPageAvailable() {
		return totalPages > 0 && pageNumber+1 < totalPages;
	}

	public boolean isPreviousPageAvailable() {
		return totalPages > 0 && pageNumber-1 >= 1;
	}

	public boolean isFirstPageAvailable() {
		return totalPages > 0 && pageNumber > 0;
	}

	public boolean isLastPageAvailable() {
		return totalPages > 0 && pageNumber < totalPages;
	}
	
	public int getNextPage() {
		if (isNextPageAvailable())
			return pageNumber+1;
  		else
  			return pageNumber;
	}

	public int getPreviousPage() {
		if (isPreviousPageAvailable())
  			return pageNumber-1;
  		else
  			return pageNumber;
	}

	public int getFirstPage() {
		return 0;
	}

	public int getLastPage() {
		return totalPages;
	}

	public int getPageSize() {
		return this.pageSize;
	}

	public void setPageSize(int pageSize) {
		if (pageSize <= 0)
			pageSize = Constants.DEFAULT_MAX_PAGE_SIZE;
		this.pageSize = pageSize;
	}

	public int getPageNumber() {
		return this.pageNumber;
	}

	public void setPageNumber(int pageNumber) {
		if (pageNumber >= 0 && pageNumber <= this.totalPages) {
			this.pageNumber = pageNumber;
		} else {
			this.pageNumber = 0;
		}
  		setFirstLoad(true);
		getCurrentPage();
	}

	public int getTotalPages() {
		return this.totalPages;
	}

	public int getTotalRecords() {
		return this.totalRecords;
	}

	public String getComponentName() {
		return this.componentName;
	}

	public void setComponentName(String componentName) {
		if (componentName == null || componentName.length() == 0 || "".equals(componentName))
			componentName = Constants.ENTITY_DATA_MODEL;
		this.componentName = componentName;
	}

	public DataModel getDataModel() {
		return dataModel;
	}

	public void setDataModel(DataModel dataModel) {
		this.dataModel = dataModel;
	}

	public boolean isFirstLoad() {
		return firstLoad;
	}

	public void setFirstLoad(boolean firstLoad) {
		this.firstLoad = firstLoad;
	}
}

<code> QuerySupervisorPercentToPlanReportBeanImpl</code>
package com.czncorp.cap.ccst.ejb;

import com.czncorp.cap.ccst.ejb.entity.*;
import com.czncorp.cap.ccst.util.DetailSummarization;
import com.czncorp.cap.ccst.Constants;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.ArrayList;

import javax.annotation.PostConstruct;
import javax.ejb.Stateful;

@Stateful
@Scope(ScopeType.CONVERSATION)
@Name("querySupervisorPercentToPlanReportBeanImpl")
public class QuerySupervisorPercentToPlanReportBeanImpl
	extends QueryCompletedOrdersReportBeanBase<QueryPercentToPlanReport>
	implements QueryCompletedOrdersReportBean<QueryPercentToPlanReport> {
	
	private static final String RENDER_PAGE = "/queries/QuerySupervisorPercentToPlanReport.xhtml";
	private static final String DM_SPV_PRODUCT_MIX_DETAILS = "dmQuerySupervisorProductMixDetails";
	private static final String DM_SPV_PERCENT_TO_PLAN_DETAILS = "dmQuerySupervisorPercentToPlanDetails";
	private static final String DM_CONSLT_PRODUCT_MIX_SUB_SUMMARY = "dmQuerySupervisorConsultantProductMixSubSummary";
	
	public QuerySupervisorPercentToPlanReportBeanImpl() {
	}

	@Override
	@PostConstruct
	public void initBean() {
		super.initBean();
		dropDownListings.setPersonnelLevel(Constants.PERSONNEL_LEVEL_SUPERVISOR);
		dropDownListings.setAddEmptyItemSupervisor(true);
		dropDownListings.buildSupervisorDropDownList();
	}

	public String generateResultQueryList() {
		
		BigDecimal id = null;
		List<QueryPercentToPlanReport> result0 = null;
		List<QueryProductMixCalculate> result1 = null;
		QueryPercentToPlanReport summaryPercentToPlan = null;
		QueryProductMixCalculate summaryProductMix = null;
		
		List<QueryProductMixCalculate> result3 = null;
		List<QueryProductMixCalculate> result4 = null;
		List<DetailSummarization<QueryProductMixCalculate>> consultantProdMixSubSummary = null;
		DetailSummarization<QueryProductMixCalculate> subSummary = null;
		
		Calendar frCalDate = new GregorianCalendar();
		Calendar toCalDate = new GregorianCalendar();
		Calendar currMonth = new GregorianCalendar();
		currMonth.set(Calendar.DAY_OF_MONTH, 1);
		
		Connection conn = null;
		CallableStatement sp = null;
		
		SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MMM-yy");
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMM");
		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMdd");
		String runType = null;
		String frDate = null;
		String toDate = null;
		
		int regionID = dropDownListings.getRegionID();
		int callcenterID = dropDownListings.getCallcenterID();
		int personnelID = dropDownListings.getSupervisorID();
		int periodID = dropDownListings.getPeriodID();

		try {
			if (regionID > 0 && callcenterID > 0 && personnelID > 0 &&
					periodID > 0 && periodID != Constants.UNDEF_PERIOD) {
				
				frCalDate.setTime(sdf3.parse(Integer.valueOf(periodID).toString()));
				frCalDate.set(Calendar.DAY_OF_MONTH, 1);
				toCalDate.setTime(frCalDate.getTime());
				toCalDate.add(Calendar.MONTH, 1);
				toCalDate.add(Calendar.DAY_OF_MONTH, -1);
				frDate = sdf1.format(frCalDate.getTime());
				toDate = sdf1.format(toCalDate.getTime());
				
				if (sdf2.format(currMonth.getTime()).equalsIgnoreCase(sdf2.format(frCalDate.getTime()))) {
					runType = Constants.CURR_MONTH;
				} else {
					runType = Constants.PRIOR_MONTH;
				}
				
				log.debug("runType==#0; frDate== #1; toDate==#2; region==#3; callCenter==#4; personnel==#5",
						runType, frDate, toDate, regionID, callcenterID, personnelID);
				
				conn = ds.getConnection();
				sp = conn.prepareCall("{call CCST.PERCENT_TO_PLAN_RCSV (?, ?, ?, ?, ?, ?, ?)}");
				sp.setString(1, runType);
				sp.setString(2, frDate);
				sp.setString(3, toDate);
				sp.setDouble(4, personnelID);
				sp.registerOutParameter(5, java.sql.Types.DOUBLE);
				sp.setString(6, Constants.ALL_DATA);
				sp.setString(7, Constants.ALL_DATA);
				sp.executeUpdate();
				id = sp.getBigDecimal(5);
				log.debug("retrieve seq==#0", id.toString());
			}
		    
		} catch (Exception e) {
			e.printStackTrace();
			
		} finally {
			if (sp != null) {
				try { sp.close(); } catch (Exception e) {}
			}
			if (conn != null) {
				try { conn.close(); } catch (Exception e) {}
			}
		}
		
		try {
			if (id != null) {
				result0 = entityManager
						.createNamedQuery(PERCENT_TO_PLAN_QUERY_CONSULTANT_SUMMARY)
						.setParameter("id", id)
						.setParameter("summary_seq", Constants.SUMMARY_SEQ)
						.getResultList();

				summaryPercentToPlan = (QueryPercentToPlanReport)entityManager
						.createNamedQuery(PERCENT_TO_PLAN_QUERY_SUPERVISOR_SUMMARY)
						.setParameter("id", id)
						.setParameter("summary_seq", Constants.SUMMARY_SEQ)
						.getSingleResult();

				// sort by consultant name
				if (result0 != null && result0.size() > 0) {
					Collections.sort(result0, new Comparator<QueryPercentToPlanReport>() {
							public int compare(QueryPercentToPlanReport o1, QueryPercentToPlanReport o2) {
								String name1 = (o1.getId().getConsultantLastName() == null ? "" : o1.getId().getConsultantLastName()) + ", " +
												(o1.getId().getConsultantFirstName() == null ? "" : o1.getId().getConsultantFirstName());
								String name2 = (o2.getId().getConsultantLastName() == null ? "" : o2.getId().getConsultantLastName()) + ", " +
												(o2.getId().getConsultantFirstName() == null ? "" : o2.getId().getConsultantFirstName());
								return name1.compareTo(name2);
							}
						}
					);
				}

				// get the consultants product mix calculated data
				consultantProdMixSubSummary = new ArrayList<DetailSummarization<QueryProductMixCalculate>>();
				result3 = entityManager
						.createNamedQuery(PRODUCT_MIX_CALCULATE_CONSULTANT_SUB_SUMMARY)
						.setParameter("id", id)
						.setParameter("personnel_seq", new BigDecimal(personnelID))
						.setParameter("summary_seq", Constants.SUMMARY_SEQ)
						.getResultList();

				if (result3 != null && result3.size() > 0) {
					for (QueryProductMixCalculate obj : result3) {
						result4 = entityManager
								.createNamedQuery(PRODUCT_MIX_CALCULATE_CONSULTANT_SUB_DETAILS)
								.setParameter("id", id)
								.setParameter("personnel_seq", new BigDecimal(obj.getId().getPersonnelSeq().intValue()))
								.setParameter("summary_seq", Constants.SUMMARY_SEQ)
								.getResultList();
						if (result4 != null && result4.size() > 0) {
							Collections.sort(result4, new Comparator<QueryProductMixCalculate>() {
									public int compare(QueryProductMixCalculate o1, QueryProductMixCalculate o2) {
										return -(o1.getId().getRevenue().intValue() - o2.getId().getRevenue().intValue());
									}
								}
							);
						}
						subSummary = new DetailSummarization<QueryProductMixCalculate>();
						subSummary.setSummary(obj);
						subSummary.setDetails(result4);
						consultantProdMixSubSummary.add(subSummary);
					}
					if (consultantProdMixSubSummary != null && consultantProdMixSubSummary.size() > 0) {
						Collections.sort(consultantProdMixSubSummary, new Comparator<DetailSummarization<QueryProductMixCalculate>>() {
								public int compare(DetailSummarization<QueryProductMixCalculate> o1, DetailSummarization<QueryProductMixCalculate> o2) {
									String name1 = (o1.getSummary().getId().getLastName() == null ? "" : o1.getSummary().getId().getLastName()) + ", " +
													(o1.getSummary().getId().getFirstName() == null ? "" : o1.getSummary().getId().getFirstName());
									String name2 = (o2.getSummary().getId().getLastName() == null ? "" : o2.getSummary().getId().getLastName()) + ", " +
													(o2.getSummary().getId().getFirstName() == null ? "" : o2.getSummary().getId().getFirstName());
									return name1.compareTo(name2);
								}
							}
						);
					}
				}

				// get the product mix calculated data
				result1 = entityManager
						.createNamedQuery(PRODUCT_MIX_CALCULATE_QUERY_SUPERVISOR_DETAILS)
						.setParameter("id", id)
						.setParameter("personnel_seq", new BigDecimal(personnelID))
						.getResultList();

				summaryProductMix = (QueryProductMixCalculate)entityManager
						.createNamedQuery(PRODUCT_MIX_CALCULATE_QUERY_SUPERVISOR_SUMMARY)
						.setParameter("id", id)
						.setParameter("personnel_seq", new BigDecimal(personnelID))
						.setParameter("summary_seq", Constants.SUMMARY_SEQ)
						.getSingleResult();

				// sort by revenue in descending order
				if (result1 != null && result1.size() > 0) {
					Collections.sort(result1, new Comparator<QueryProductMixCalculate>() {
							public int compare(QueryProductMixCalculate o1, QueryProductMixCalculate o2) {
								return -(o1.getId().getRevenue().intValue() - o2.getId().getRevenue().intValue());
							}
						}
					);
				}
				
				log.debug("\nRetrieve seq==#0" +
						"\nSupervisorPercentToPlanDetails rows==#1" +
						"\nSupervisorPercentToPlanSummary found==#2" +
						"\nProdMixDetail rows==#3" +
						"\nProdMixSummary found==#4",
						id.toString(), result0.size(), (summaryPercentToPlan == null ? "false" : "true"),
						result1.size(), (summaryProductMix == null ? "false" : "true"));
			}
			
  		} catch (Exception e) {
  			log.error(e.toString());
  			e.printStackTrace();
  		}

  		resultPercentToPlanQuerySummary = summaryPercentToPlan;
  		resultProductMixSummary = summaryProductMix;
  		dmPercentToPlanDetails.setPaginationSettings(result0, Constants.PageSizeOptions.ALL.getSize(), DM_SPV_PERCENT_TO_PLAN_DETAILS);
  		dmProductMixDetails.setPaginationSettings(result1, Constants.PageSizeOptions.ALL.getSize(), DM_SPV_PRODUCT_MIX_DETAILS);
  		dmConsultantProductMixSubSummary.setPaginationSettings(consultantProdMixSubSummary, Constants.DEFAULT_SUMMARY_PAGE_SIZE, DM_CONSLT_PRODUCT_MIX_SUB_SUMMARY);
  		
  		return RENDER_PAGE;
	}
}


<code> QuerySupervisorPercentToPlanReport.xhtml </code>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:s="http://jboss.com/products/seam/taglib"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:a4j="http://richfaces.org/a4j"
                template="/layout/template.xhtml">
                       
<ui:define name="body">
       	
	<h:panelGrid columns="1" frame="none" id="mainPanel"
       			class="mainPanel" border="0">
    
    <h:messages globalOnly="true" styleClass="message" id="globalMessages"/>
    
    <h:form id="querySupervisorPercentToPlanReportSearch" styleClass="edit">

		<rich:panel headerClass="header-panel">
    
	       	<f:facet name="header">
        		<h:outputText value="Supervisor Percent To Plan Search Parameters"/>
       		</f:facet>
       	
			<h:panelGrid columns="1" frame="none" id="searchPanel"
       			class="mainPanel" border="0">
        	
            <s:decorate template="/layout/display.xhtml">
                <ui:define name="label">Region</ui:define>
                <h:selectOneMenu id="regionID" value="#{querySupervisorPercentToPlanReport.dropDownListings.regionID}" required="true">
                	<f:selectItems id="regionDropDownList" value="#{querySupervisorPercentToPlanReport.dropDownListings.regionDropDownList}" />
                    <a4j:support event="onchange" reRender="callcenterID,supervisorID" ajaxSingle="true"
                    		action="#{querySupervisorPercentToPlanReport.dropDownListings.buildCallCenterDropDownList}"/>
                </h:selectOneMenu>
			</s:decorate>
        
            <s:decorate template="/layout/display.xhtml">
                <ui:define name="label">Call Center</ui:define>
                <h:selectOneMenu id="callcenterID" value="#{querySupervisorPercentToPlanReport.dropDownListings.callcenterID}" required="true"
                		disabled="#{querySupervisorPercentToPlanReport.dropDownListings.regionID == 0}">
                	<f:selectItems id="callCenterDropDownList" value="#{querySupervisorPercentToPlanReport.dropDownListings.callCenterDropDownList}" />
                    <a4j:support event="onchange" reRender="supervisorID" ajaxSingle="true"
                    		action="#{querySupervisorPercentToPlanReport.dropDownListings.buildSupervisorDropDownList}"/>
                </h:selectOneMenu>
            </s:decorate>
        
            <s:decorate template="/layout/display.xhtml">
                <ui:define name="label">Supervisor</ui:define>
                <h:selectOneMenu id="supervisorID" value="#{querySupervisorPercentToPlanReport.dropDownListings.supervisorID}" required="true"
                		disabled="#{querySupervisorPercentToPlanReport.dropDownListings.regionID == 0 || querySupervisorPercentToPlanReport.dropDownListings.callcenterID == 0}" >
                	<f:selectItems id="supervisorDropDownList" value="#{querySupervisorPercentToPlanReport.dropDownListings.supervisorDropDownList}" />
                </h:selectOneMenu>
            </s:decorate>
        
            <s:decorate template="/layout/display.xhtml">
                <ui:define name="label">Period</ui:define>
                <h:selectOneMenu id="periodID" value="#{querySupervisorPercentToPlanReport.dropDownListings.periodID}" required="true">
                	<s:selectItems id="periodDropDownList" value="#{querySupervisorPercentToPlanReport.dropDownListings.periodDropDownList}"
                			var="list" itemValue="#{list.value}" label="#{list.label}" />
                </h:selectOneMenu>
            </s:decorate>
        
            <s:decorate template="/layout/display.xhtml">
        	<div class="actionButtons">
       	    	<h:commandButton id="search" value="Search"
       	    			action="#{querySupervisorPercentToPlanReport.generateResultQueryList}" />
        	</div>
            </s:decorate>

			<a4j:status>
				<f:facet name="start">
					<h:graphicImage value="/images/ajax_status_rotating_orange.gif"/>
				</f:facet>
			</a4j:status>
			
			</h:panelGrid>

        </rich:panel>

    </h:form>

    <br/>
    
	<rich:panel headerClass="header-panel">
    
       	<f:facet name="header">
       		<h:outputText value="Supervisor Percent To Plan Report"/>
   		</f:facet>
    
		<h:form id="querySupervisorPercentToPlanReportListing" styleClass="edit">

	    <div class="results" id="querySupervisorPercentToPlanReport" >

    		<h:outputText value="Supervisor Percent To Plan Report search returned no results." 
            			   rendered="#{empty querySupervisorPercentToPlanReport.dmPercentToPlanDetails.currentPage}"/>
               
    		<rich:dataTable var="record" id="querySupervisorPercentToPlanReport"
              				value="#{dmQuerySupervisorPercentToPlanDetails}" 
           					rendered="#{not empty querySupervisorPercentToPlanReport.dmPercentToPlanDetails.currentPage}"
							onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
            				onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
							cellpadding="0" cellspacing="0"
							width="700" border="0"
           					>
           
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Consultant" styleClass="columnHeader"/>
            		</f:facet>
            		#{record.id.consultantLastName}, #{record.id.consultantFirstName}
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Rev/Call" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.avgRevenuePerCall}" >
            			<f:convertNumber type="currency" currencySymbol="$"/>
            		</h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Calls/Hour" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.noOfCallsPerHour}" />
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="% Available" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.mtdPctAvailable}%" />
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Actual Sold" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.actualSoldValue}" >
            			<f:convertNumber type="currency" currencySymbol="$"/>
            		</h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Commission" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.commission}" >
            			<f:convertNumber type="currency" currencySymbol="$"/>
            		</h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="ACD Date" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.mtdFileDate}" >
            			<s:convertDateTime pattern="MM-dd-yyyy"/>
            		</h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Avail Time" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.mtdAvailableTime}" />
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="SignOn Hours" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.mtdSignOnHours}" >
		            	<f:convertNumber pattern="###,###,##0"/>
		            </h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Incoming Calls" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.mtdIncomingCalls}" >
		            	<f:convertNumber pattern="###,###,##0"/>
            		</h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="MTD Adj Calls" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.mtdAdjustedCallTotal}" >
		            	<f:convertNumber pattern="###,###,##0"/>
            		</h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Compensation Type" styleClass="columnHeader"/>
            		</f:facet>
            		#{record.id.compensationTypeDesc}
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="% To Plan" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.percentToPlan}%" />
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="Quota" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.quotaValue}" >
            			<f:convertNumber type="currency" currencySymbol="$"/>
            		</h:outputText>
        		</h:column>
        		<h:column>
            		<f:facet name="header">
            			<h:outputText value="AHT" styleClass="columnHeader"/>
            		</f:facet>
            		<h:outputText value="#{record.id.aht}" >
        				<f:converter converterId="cnv.AvgHandlingTime"/>
            		</h:outputText>
        		</h:column>
		    </rich:dataTable>

    	</div>

    	</h:form>

    </rich:panel>

    <br/>
    
	<rich:panel headerClass="header-panel"
    	rendered="#{not empty querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.currentPage}" >
    
       	<f:facet name="header">
       		<h:outputText value="Consultant Product Mix Totals"/>
   		</f:facet>
    
		<h:form id="queryConsultantSubSummaryReportListing" styleClass="edit">
    
    	<div class="results" id="queryConsultantProdMixSubDetails" >
               
    		<rich:dataTable var="record" id="queryConsultantProdMixSubDetails"
		           			value="#{dmQuerySupervisorConsultantProductMixSubSummary}" 
        		   			rendered="#{not empty querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.currentPage}"
							onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
            				onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
							cellpadding="0" cellspacing="0"
							width="700" border="0"
        		   			>
           					
				<f:facet name="header">
					<rich:columnGroup>
						<rich:column><h:outputText value="Consultant"	styleClass="columnHeader"/></rich:column>
						<rich:column><h:outputText value="Product Mix"	styleClass="columnHeader"/></rich:column>
						<rich:column><h:outputText value="Revenue"		styleClass="columnHeader"/></rich:column>
<!--
						<rich:column><h:outputText value="Units"		styleClass="columnHeader"/></rich:column>
						<rich:column><h:outputText value="Revenue"		styleClass="columnHeader"/></rich:column>
						<rich:column><h:outputText value="% to Revenue" styleClass="columnHeader"/></rich:column>
-->						
					</rich:columnGroup>
				</f:facet>

				<rich:column colspan="3">           
            		<h:outputText value="#{record.summary.id.lastName}, #{record.summary.id.firstName}" />
            	</rich:column>

				<rich:subTable var="record2" value="#{record.details}"
							onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
            				onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" >
				
					<rich:column>           
            			<rich:spacer />
            			<f:facet name="footer">
		            		<h:outputText value="Totals for #{record.summary.id.lastName}, #{record.summary.id.firstName}" />
            			</f:facet>
            		</rich:column>
					<rich:column>           
            			<h:outputText value="#{record2.id.productMixDesc}" />
            			<f:facet name="footer">
	            			<rich:spacer />
            			</f:facet>
            		</rich:column>
<!--            		
					<rich:column>           
		            	<h:outputText value="#{record2.id.units}" >
		            		<f:convertNumber pattern="###,###,##0"/>
	        		    </h:outputText>
            			<f:facet name="footer">
			            	<h:outputText value="#{record.summary.id.units}" >
			            		<f:convertNumber pattern="###,###,##0"/>
	    	    		    </h:outputText>
            			</f:facet>
    	        	</rich:column>
-->    	        	
					<rich:column>           
            			<h:outputText value="#{record2.id.revenue}" >
            				<f:convertNumber type="currency" currencySymbol="$" />
            			</h:outputText>
            			<f:facet name="footer">
	            			<h:outputText value="#{record.summary.id.revenue}" >
    	        				<f:convertNumber type="currency" currencySymbol="$" />
        	    			</h:outputText>
            			</f:facet>
	            	</rich:column>
<!--	            	
					<rich:column>           
        	    		<h:outputText value="#{record2.id.percentToRevenue}%" />
            			<f:facet name="footer">
            				<rich:spacer />
            			</f:facet>
            		</rich:column>
-->            		
            	</rich:subTable>
           					
				<f:facet name="footer">
					<rich:columnGroup>
						<rich:column>
							<h:outputText value="Totals"/>
						</rich:column>
						<rich:column><rich:spacer/></rich:column>
<!--						
						<rich:column>
            				<h:outputText value="#{querySupervisorPercentToPlanReport.resultProductMixSummary.id.units}" >
				            	<f:convertNumber pattern="###,###,##0"/>
        		    		</h:outputText>
						</rich:column>
-->						
						<rich:column>
		            		<h:outputText value="#{querySupervisorPercentToPlanReport.resultProductMixSummary.id.revenue}" >
        		    			<f:convertNumber type="currency" currencySymbol="$" />
            				</h:outputText>
						</rich:column>
<!--						
						<rich:column><rich:spacer/></rich:column>
-->						
					</rich:columnGroup>
				</f:facet>

    		</rich:dataTable>

	    </div>
    
    	<div class="tableControl">

			<h:outputText value="Page #{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.pageNumber + 1} of #{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.totalPages + 1}"
       		   			rendered="#{not empty querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.currentPage}" />
      
        	<s:link view="/queries/QuerySupervisorPercentToPlanReport.xhtml" 
            	rendered="#{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.firstPageAvailable}" 
            	   value="#{messages.left}#{messages.left} First Page"
                	  id="firstPage">
          		<f:param name="pageNumber" value="0"/>
        	</s:link>
        
        	<s:link view="/queries/QuerySupervisorPercentToPlanReport.xhtml" 
            	rendered="#{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.previousPageAvailable}" 
               	   value="#{messages.left} Previous Page"
                 	  id="previousPage">
            	<f:param name="pageNumber" 
                	    value="#{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.previousPage}"/>
        	</s:link>
        
        	<s:link view="/queries/QuerySupervisorPercentToPlanReport.xhtml" 
            	rendered="#{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.nextPageAvailable}" 
               	   value="Next Page #{messages.right}"
                  	  id="nextPage">
            	<f:param name="pageNumber" 
                	    value="#{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.nextPage}"/>
        	</s:link>
        
        	<s:link view="/queries/QuerySupervisorPercentToPlanReport.xhtml" 
            	rendered="#{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.lastPageAvailable}" 
               	   value="Last Page #{messages.right}#{messages.right}"
                  	  id="lastPage">
            	<f:param name="pageNumber" 
                	    value="#{querySupervisorPercentToPlanReport.dmConsultantProductMixSubSummary.lastPage}"/>
        	</s:link>
        
    	</div>

    	</h:form>

    </rich:panel>

    <br/>
    
	<rich:panel headerClass="header-panel"
    	rendered="#{not empty querySupervisorPercentToPlanReport.dmPercentToPlanDetails.currentPage}" >
    
       	<f:facet name="header">
       		<h:outputText value="Supervisor Product Mix Report"/>
   		</f:facet>
    
		<h:form id="querySupervisorProductMixListing" styleClass="edit">
    
    	<div class="results" id="querySupervisorPercentToPlanReportProdMix" >
               
    		<rich:dataTable var="record" id="querySupervisorPercentToPlanReportProdMix"
		           			value="#{dmQuerySupervisorProductMixDetails}" 
        		   			rendered="#{not empty querySupervisorPercentToPlanReport.dmProductMixDetails.currentPage}"
							onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
            				onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
							cellpadding="0" cellspacing="0"
							width="700" border="0"
        		   			>
           					
				<f:facet name="header">
					<rich:columnGroup>
						<rich:column><h:outputText value="Product Mix"	styleClass="columnHeader"/></rich:column>
						<rich:column><h:outputText value="Revenue"		styleClass="columnHeader"/></rich:column>
<!--						
						<rich:column><h:outputText value="Units"		styleClass="columnHeader"/></rich:column>
						<rich:column><h:outputText value="Revenue"		styleClass="columnHeader"/></rich:column>
						<rich:column><h:outputText value="% to Revenue" styleClass="columnHeader"/></rich:column>
-->						
					</rich:columnGroup>
				</f:facet>

				<rich:column>           
            		<h:outputText value="#{record.id.productMixDesc}" />
            	</rich:column>
<!--            	
				<rich:column>           
		            <h:outputText value="#{record.id.units}" >
		            	<f:convertNumber pattern="###,###,##0"/>
        		    </h:outputText>
            	</rich:column>
-->            	
				<rich:column>           
            		<h:outputText value="#{record.id.revenue}" >
            			<f:convertNumber type="currency" currencySymbol="$" />
            		</h:outputText>
            	</rich:column>
<!--            	
				<rich:column>           
            		<h:outputText value="#{record.id.percentToRevenue}%" />
            	</rich:column>
-->            	
           					
				<f:facet name="footer">
					<rich:columnGroup>
						<rich:column>
							<h:outputText value="Totals"/>
						</rich:column>
<!--						
						<rich:column>
            				<h:outputText value="#{querySupervisorPercentToPlanReport.resultProductMixSummary.id.units}" >
				            	<f:convertNumber pattern="###,###,##0"/>
        		    		</h:outputText>
						</rich:column>
-->						
						<rich:column>
		            		<h:outputText value="#{querySupervisorPercentToPlanReport.resultProductMixSummary.id.revenue}" >
        		    			<f:convertNumber type="currency" currencySymbol="$" />
            				</h:outputText>
						</rich:column>
<!--						
						<rich:column><rich:spacer/></rich:column>
-->						
					</rich:columnGroup>
				</f:facet>

    		</rich:dataTable>

	    </div>

    	</h:form>

    </rich:panel>

    <br/>

	<rich:panel headerClass="header-panel"
		rendered="#{not empty querySupervisorPercentToPlanReport.dmPercentToPlanDetails.currentPage}" >
		
       	<f:facet name="header">
       		<h:outputText value="Supervisor Percent To Plan Summary Report"/>
       	</f:facet>

	    <div class="results" id="querySupervisorPercentToPlanReportSummary">
       	
       	<h:panelGrid columns="3" rules="all" frame="border"
       	 	id="querySupervisorPercentToPlanReportSummary" class="summaryControl" 
			rendered="#{not empty querySupervisorPercentToPlanReport.resultPercentToPlanSummary}"
       		styleClass="columnHeader" >

			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">Available Time :</ui:define>
        	        		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.mtdAvailableTime}" >
				            	<f:convertNumber pattern="###,###,##0"/>
				            </h:outputText>
						</s:decorate>
			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">Sign on hours :</ui:define>
        	        		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.mtdSignOnHours}" >
				            	<f:convertNumber pattern="###,###,##0"/>
				            </h:outputText>
						</s:decorate>
		    	        <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">Percent Available :</ui:define>
    	            		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.mtdPctAvailable}%" />
						</s:decorate>

		        	    <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">MTD Incoming Calls :</ui:define>
        	        		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.mtdIncomingCalls}" >
				            	<f:convertNumber pattern="###,###,##0"/>
				            </h:outputText>
						</s:decorate>
			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">MTD Adjusted Calls :</ui:define>
        	        		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.mtdAdjustedCallTotal}" >
				            	<f:convertNumber pattern="###,###,##0"/>
				            </h:outputText>
						</s:decorate>
		    	        <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">Number of calls / hour :</ui:define>
    	            		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.noOfCallsPerHour}" />
						</s:decorate>

			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">Rev/Call Revenue :</ui:define>
        	        		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.revcallRevenue}" >
        		    			<f:convertNumber type="currency" currencySymbol="$"/>
        	        		</h:outputText>
						</s:decorate>
			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">Rev / Call :</ui:define>
        	        		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.avgRevenuePerCall}" >
        		    			<f:convertNumber type="currency" currencySymbol="$" />
        		    		</h:outputText>
						</s:decorate>
			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label"/>
        	        		<h:outputText value="" />
						</s:decorate>

			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label">Total Revenue :</ui:define>
        	        		<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.actualSoldValue}" >
        		    			<f:convertNumber type="currency" currencySymbol="$"/>
        	        		</h:outputText>
						</s:decorate>
		            	<s:decorate template="/layout/display.xhtml">
    		            	<ui:define name="label">Commission :</ui:define>
                			<h:outputText value="#{querySupervisorPercentToPlanReport.resultPercentToPlanSummary.id.commission}" >
        		    			<f:convertNumber type="currency" currencySymbol="$"/>
                			</h:outputText>
						</s:decorate>
			            <s:decorate template="/layout/display.xhtml">
    			            <ui:define name="label"/>
        	        		<h:outputText value="" />
						</s:decorate>
       		
       	</h:panelGrid>

	    </div>
	    
    </rich:panel>

	</h:panelGrid>
    
</ui:define>

</ui:composition>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list