[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