[jboss-user] [JBoss Seam] - Re: Here is a Richfaces Ajax Datascroler and Seam Example

supernovasoftware.com do-not-reply at jboss.com
Sat Feb 2 18:08:14 EST 2008


Here is a more recent version of the code.  This time I have the query return a List of maps for an HQL query.

I just override get id and it works.  Try this more recent version.  Are you using Seam 2.0.x?

I have not seen too much interest in my method.  If people like the technique employed, I can post an example when I get some time.



  | 
  | import java.io.IOException;
  | import java.io.Serializable;
  | import java.util.ArrayList;
  | import java.util.HashMap;
  | import java.util.List;
  | import java.util.Map;
  | 
  | import javax.faces.context.FacesContext;
  | 
  | import org.ajax4jsf.model.DataVisitor;
  | import org.ajax4jsf.model.ExtendedDataModel;
  | import org.ajax4jsf.model.Range;
  | import org.ajax4jsf.model.SequenceRange;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.log.Log;
  | 
  | import com.xxx.ui.Idable;
  | 
  | public abstract class BaseExtendedDataModel<T,ID extends Serializable> extends ExtendedDataModel implements  BaseExtendedDataModelDAO<T, ID>{
  | 
  | 	private @Logger Log log;
  | 	
  | 	int rowNum=-1;	
  | 
  | 	public int getRowNum()
  | 	{	  
  | 	  return ++rowNum;
  | 	}
  | 
  | 	public List<T> listRow;
  | 	
  | 	private ID currentId;
  | 	private Map<ID, T> wrappedData = new HashMap<ID, T>();
  | 	private List<ID> wrappedKeys;
  | 	private Long rowCount; // better to buffer row count locally
  | 	
  | 	public abstract Long getCount();
  | 	public abstract List<T> getList(Integer firstRow, Integer maxResults);
  | 	public abstract T findById(ID id);
  | 	
  | 	public ID getId(T row)
  | 	{
  | 		Idable idable = (Idable) row;
  | 		ID id = (ID) idable.getId();
  | 		return id;
  | 	}
  | 	
  | 	public void wrap(FacesContext context, DataVisitor visitor, Range range, Object argument, List<T> list) throws IOException
  | 	{
  | 		wrappedKeys = new ArrayList<ID>();
  | 		wrappedData = new HashMap<ID, T>();
  | 		for (T row : list)
  | 		{
  | 			ID id = getId(row);
  | 			wrappedKeys.add(id);
  | 			wrappedData.put(id, row);
  | 			visitor.process(context, id, argument);
  | 		}		
  | 	}	
  | 	
  | 	public boolean hasById(ID id) 
  | 	{
  | 		for (T row : listRow) 
  | 		{
  | 			ID rowId = getId(row);
  | 			if (rowId.equals(id))
  | 			{
  | 				return true;
  | 			}
  | 		}
  | 		return false;		
  | 	}
  | 	
  | 	@Override
  | 	public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) throws IOException
  | 	{		
  | 		int firstRow = ((SequenceRange) range).getFirstRow();
  | 		int maxResults = ((SequenceRange) range).getRows();
  | 		log.info("("+firstRow +", "+ maxResults+")");
  | 		wrap(context, visitor, range, argument, getList(firstRow, maxResults));
  | 	}
  | 	
  |     /*
  | 	 * This method normally called by Visitor before request Data Row.
  | 	 */ 
  | 	@Override
  | 	public void setRowKey(Object key) 
  | 	{
  | 		this.currentId = (ID) key;
  | 	}
  | 	
  | 	@Override
  | 	public int getRowCount() 
  | 	{
  | 	  if(rowCount == null) 
  | 	    return (rowCount = this.getCount()).intValue();  
  | 	  else 
  |         return rowCount.intValue();
  | 	}
  | 	
  | 	@Override
  | 	public boolean isRowAvailable() 
  | 	{
  | 		if (currentId == null) {
  | 			return false;
  | 		} else {
  | 			return hasById(currentId);
  | 		}
  | 	}
  | 	
  | 	/**
  | 	 * This is main way to obtain data row. It is intensively used by framework.
  | 	 * We strongly recommend use of local cache in that method.
  | 	 */
  | 	@Override
  | 	public Object getRowData() {
  | 		if (currentId == null) {
  | 			return null;
  | 		} else {
  | 			T ret = wrappedData.get(currentId);
  | 			if (ret == null) {
  | 				ret = this.findById(currentId);
  | 				wrappedData.put(currentId, ret);
  | 				return ret;
  | 			} else {
  | 				return ret;
  | 			}
  | 		}
  | 	}
  | 	
  | 
  | 	// Unused rudiment from old JSF staff. 
  | 	@Override public int getRowIndex() { throw new UnsupportedOperationException();	}
  | 	@Override public void setRowIndex(int rowIndex) { throw new UnsupportedOperationException(); }
  | 	@Override public Object getWrappedData() { throw new UnsupportedOperationException(); }
  | 	@Override public void setWrappedData(Object data) { throw new UnsupportedOperationException(); }
  | 	
  | 	// TODO if this is never called by the framework why is it necessary.
  | 	@Override public Object getRowKey() {  throw new UnsupportedOperationException(); }
  | 
  | }
  | 
  | 


  | 
  | 
  | import java.util.List;
  | import java.util.Map;
  | 
  | import org.jboss.seam.ScopeType;
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Out;
  | import org.jboss.seam.annotations.Scope;
  | import org.jboss.seam.log.Log;
  | 
  | import com.xxx.dao.richfaces.BaseExtendedDataModel;
  | import com.xxx.search.PipeSearch;
  | 
  | @Name("pipeSearchExtendedDataModel")
  | @Scope(ScopeType.CONVERSATION)
  | public class PipeSearchExtendedDataModel extends BaseExtendedDataModel<Map<String, Object>, Long>  
  | {
  | 	private @Logger Log log;
  | 	
  | 	@In(create=true) PipeSearchDAO pipeSearchDAO;
  | 	
  | 	@In(required=false) @Out(required = false)
  | 	private PipeSearch pipeSearch;  
  | 	public PipeSearch getPipeSearch() { return pipeSearch; }
  | 	public void setPipeSearch(PipeSearch pipeSearch) { this.pipeSearch = pipeSearch; }		
  | 
  | 	@Override
  | 	public Long getId(Map<String, Object> row)
  | 	{
  |       return (Long) row.get("minId");
  | 	}
  | 	
  | 	@Override
  | 	public Long getCount() 
  | 	{		
  | 	  return pipeSearchDAO.getCount(pipeSearch);
  | 	}
  | 	
  | 	@Override
  | 	public Map<String, Object> findById(Long id) 
  | 	{		
  | 	  return pipeSearchDAO.findResultById(id);
  | 	}
  | 	
  | 	@Override
  | 	public List<Map<String, Object>> getList(Integer firstRow, Integer maxResults)
  | 	{
  | 		return listRow = pipeSearchDAO.getList(pipeSearch,firstRow, maxResults);
  | 	}
  | 
  | }
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4125802#4125802

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4125802



More information about the jboss-user mailing list