Any Seam example using RichFace binding attribute?
bruce998877 Feb 18, 2010 7:10 PMHello,
I have this issue for many days. Most of codes are from Richfaces demo. But I need to combine Seam and Richface. It seems that I have to use binding attribute. But I always got error message. I wonder if anyone can help me out? Thanks.
I got below error message:
javax.el.ELException: /conversation.xhtml @22,64 binding="#{dataTableScrollerBean.table}": java.lang.IllegalArgumentException: argument type mismatch
Here is my code:
RichFaces codes
<rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="400px" 
                width="700px" id="carList" rows="40" columnClasses="col"
                value="#{dataTableScrollerBean.allCars}" var="category" sortMode="single"
                binding="#{dataTableScrollerBean.table}"
                sortOrder="#{dataTableScrollerBean.order}"
                selection="#{dataTableScrollerBean.selection}">
                                <rich:column id="make">
                                        <f:facet name="header"><h:outputText styleClass="headerText" value="Make" /></f:facet>
                                        <h:outputText value="#{category.make}" />
                                </rich:column>
                                <rich:column id="model">
                                        <f:facet name="header"><h:outputText styleClass="headerText" value="Model" /></f:facet>
                                        <h:outputText value="#{category.model}" />
                                </rich:column>
                                <rich:column id="price">
                                        <f:facet name="header"><h:outputText styleClass="headerText" value="Price" /></f:facet>
                                        <h:outputText value="#{category.price}" />
                                </rich:column>
                                <rich:column id="mileage">
                                        <f:facet name="header"><h:outputText styleClass="headerText" value="Mileage" /></f:facet>
                                        <h:outputText value="#{category.mileage}" />
                                </rich:column>
                                <rich:column width="200px" id="vin">
                                        <f:facet name="header"><h:outputText styleClass="headerText" value="VIN" /></f:facet>
                                        <h:outputText value="#{category.vin}" />
                                </rich:column>
                                <rich:column id="stock">
                                        <f:facet name="header"><h:outputText styleClass="headerText" value="Stock" /></f:facet>
                                        <h:outputText value="#{category.stock}" />
                                </rich:column>
                        </rich:scrollableDataTable>
Java codes
/**
 * 
 */
package com.cgi.kym.action;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.richfaces.component.UIScrollableDataTable;
import org.richfaces.component.html.HtmlScrollableDataTable;
import org.richfaces.model.SortField;
import org.richfaces.model.SortOrder;
import org.richfaces.model.selection.SimpleSelection;
/**
 * @author Nick Belaevski - nbelaevski@exadel.com created 02.03.2007
 * 
 */
@Name("dataTableScrollerBean")
@Scope(ScopeType.SESSION)
public class DataTableScrollerBean implements java.io.Serializable {
        private DemoInventoryItem currentItem = new DemoInventoryItem();
        private int rows = 10;
        /* (non-Javadoc)
         * @see com.cgi.kym.action.IDataTableScroller#getRows()
         */
        public int getRows() {
                return rows;
        }
        /* (non-Javadoc)
         * @see com.cgi.kym.action.IDataTableScroller#setRows(int)
         */
        public void setRows(int rows) {
                this.rows = rows;
        }
        /* (non-Javadoc)
         * @see com.cgi.kym.action.IDataTableScroller#fetchCurrentRow(javax.faces.event.ActionEvent)
         */
        public void fetchCurrentRow(ActionEvent event) {
                String vin=(FacesContext.getCurrentInstance().
                                getExternalContext().getRequestParameterMap().get("vin"));
                currentRow = Integer.parseInt(FacesContext.getCurrentInstance().
                                getExternalContext().getRequestParameterMap().get("row"));
                for (DemoInventoryItem item : allCars) {
                        if (item.getVin().equals(vin)){
                                currentItem=item;
                                break;
                        }
                }
        }
        private Set<Integer> keys = new HashSet<Integer>();
        private int currentRow;
        //@In (required=false) @Out(required=false) 
        private static SimpleSelection selection = new SimpleSelection();
        private UIScrollableDataTable table;
        private SortOrder order = new SortOrder();
        private int scrollerPage=1;
        private ArrayList<DemoInventoryItem[]> model = null;
        private ArrayList<DemoInventoryItem> selectedCars = new ArrayList<DemoInventoryItem>();
        private ArrayList<Facet> columns = new ArrayList<Facet>();
        private static int DECIMALS = 1;
        private static int ROUNDING_MODE = BigDecimal.ROUND_HALF_UP;
        //@DataModel
        private List<DemoInventoryItem> allCars = null;
    
        
        public DataTableScrollerBean() {
                initColumnsHeaders();
                SortField[] fields = { new SortField("make", true) };
                order.setFields(fields);
        }
        
        public List<DemoInventoryItem> getAllCars() {
                synchronized (this) {
                        if (allCars == null) {
                                allCars = new ArrayList<DemoInventoryItem>();
                                for (int k = 0; k <= 5; k++) {
                                        try {
                                                switch (k) {
                                                case 0:
                                                        allCars
                                                                        .addAll(createCar("Chevrolet", "Corvette",
                                                                                        5));
                                                        allCars.addAll(createCar("Chevrolet", "Malibu", 8));
                                                        allCars.addAll(createCar("Chevrolet", "S-10", 10));
                                                        allCars.addAll(createCar("Chevrolet", "Tahoe", 6));
                                                        break;
                                                case 1:
                                                        allCars.addAll(createCar("Ford", "Taurus", 12));
                                                        allCars.addAll(createCar("Ford", "Explorer", 11));
                                                        break;
                                                case 2:
                                                        allCars.addAll(createCar("Nissan", "Maxima", 9));
                                                        break;
                                                case 3:
                                                        allCars.addAll(createCar("Toyota", "4-Runner", 7));
                                                        allCars.addAll(createCar("Toyota", "Camry", 15));
                                                        allCars.addAll(createCar("Toyota", "Avalon", 13));
                                                        break;
                                                case 4:
                                                        allCars.addAll(createCar("GMC", "Sierra", 8));
                                                        allCars.addAll(createCar("GMC", "Yukon", 10));
                                                        break;
                                                case 5:
                                                        allCars.addAll(createCar("Infiniti", "G35", 6));
                                                        break;
                                                /*
                                                 * case 6: allCars.addAll(createCar("UAZ","469", 6));
                                                 * break;
                                                 */
                                                default:
                                                        break;
                                                }
                                        } catch (Exception e) {
                                                System.out.println("!!!!!!loadAllCars Error: "
                                                                + e.getMessage());
                                                e.printStackTrace();
                                        }
                                }
                        }
                }
                return allCars;
        }
        public List<SelectItem> getPagesToScroll() {
                List<SelectItem> list = new ArrayList<SelectItem>();
                for (int i = 1; i <= allCars.size() / getRows()+1; i++) {
                        if (Math.abs(i - scrollerPage) < 5) {
                                SelectItem item = new SelectItem(i);
                                list.add(item);
                        }
                }
                return list;
        }
        public List<DemoInventoryItem> getTenRandomCars() {
                List<DemoInventoryItem> result = new ArrayList<DemoInventoryItem>();
                int size = getAllCars().size() - 1;
                for (int i = 0; i < 10; i++) {
                        result.add(getAllCars().get(rand(1, size)));
                }
                return result;
        }
        public int genRand() {
                return rand(1, 10000);
        }
        public List<DemoInventoryItem> createCar(String make, String model,
                        int count) {
                ArrayList<DemoInventoryItem> iiList = null;
                try {
                        int arrayCount = count;
                        DemoInventoryItem[] demoInventoryItemArrays = new DemoInventoryItem[arrayCount];
                        for (int j = 0; j < demoInventoryItemArrays.length; j++) {
                                DemoInventoryItem ii = new DemoInventoryItem();
                                ii.setMake(make);
                                ii.setModel(model);
                                ii.setStock(randomstring(6, 7));
                                ii.setVin(randomstring(14, 15));
                                ii.setMileage(new BigDecimal(rand(5000, 80000)).setScale(
                                                DECIMALS, ROUNDING_MODE));
                                ii.setMileageMarket(new BigDecimal(rand(25000, 45000))
                                                .setScale(DECIMALS, ROUNDING_MODE));
                                ii.setPrice(new Integer(rand(15000, 55000)));
                                ii.setPriceMarket(new BigDecimal(rand(15000, 55000)).setScale(
                                                DECIMALS, ROUNDING_MODE));
                                ii.setDaysLive(rand(1, 90));
                                ii.setChangeSearches(new BigDecimal(rand(0, 5)).setScale(
                                                DECIMALS, ROUNDING_MODE));
                                ii.setChangePrice(new BigDecimal(rand(0, 5)).setScale(DECIMALS,
                                                ROUNDING_MODE));
                                ii.setExposure(new BigDecimal(rand(0, 5)).setScale(DECIMALS,
                                                ROUNDING_MODE));
                                ii.setActivity(new BigDecimal(rand(0, 5)).setScale(DECIMALS,
                                                ROUNDING_MODE));
                                ii.setPrinted(new BigDecimal(rand(0, 5)).setScale(DECIMALS,
                                                ROUNDING_MODE));
                                ii.setInquiries(new BigDecimal(rand(0, 5)).setScale(DECIMALS,
                                                ROUNDING_MODE));
                                demoInventoryItemArrays[j] = ii;
                        }
                        iiList = new ArrayList<DemoInventoryItem>(Arrays
                                        .asList(demoInventoryItemArrays));
                } catch (Exception e) {
                        System.out.println("!!!!!!createCategory Error: " + e.getMessage());
                        e.printStackTrace();
                }
                return iiList;
        }
        public static int rand(int lo, int hi) {
                Random rn2 = new Random();
                // System.out.println("**" + lo);
                // System.out.println("**" + hi);
                int n = hi - lo + 1;
                int i = rn2.nextInt() % n;
                if (i < 0)
                        i = -i;
                return lo + i;
        }
        public static String randomstring(int lo, int hi) {
                int n = rand(lo, hi);
                byte b[] = new byte[n];
                for (int i = 0; i < n; i++)
                        b[i] = (byte) rand('A', 'Z');
                return new String(b);
        }
        public SimpleSelection getSelection() {
                return selection;
        }
        public void setSelection(SimpleSelection selection) {
                this.selection = selection;
        }
        public String takeSelection() {
                getSelectedCars().clear();
                if (getSelection().isSelectAll()) {
                        getSelectedCars().addAll(allCars);
                } else {
                        Iterator<Object> iterator = getSelection().getKeys();
                        while (iterator.hasNext()) {
                                Object key = iterator.next();
                                table.setRowKey(key);
                                if (table.isRowAvailable()) {
                                        getSelectedCars().add(
                                                        (DemoInventoryItem) table.getRowData());
                                }
                        }
                }
                return null;
        }
        public ArrayList<DemoInventoryItem> getSelectedCars() {
                return selectedCars;
        }
        public void setSelectedCars(ArrayList<DemoInventoryItem> selectedCars) {
                this.selectedCars = selectedCars;
        }
        public UIScrollableDataTable getTable() {
                return table;
        }
        public void setTable(UIScrollableDataTable table) {
                this.table = table;
        }
        public void initColumnsHeaders() {
                columns.clear();
                String header;
                String footer = "";
                header = "Chevrolet";
                Facet facet = new Facet(header, footer);
                columns.add(facet);
                header = "Ford";
                facet = new Facet(header, footer);
                columns.add(facet);
                header = "Nissan";
                facet = new Facet(header, footer);
                columns.add(facet);
                header = "Toyota";
                facet = new Facet(header, footer);
                columns.add(facet);
                header = "GMC";
                facet = new Facet(header, footer);
                columns.add(facet);
                header = "Infiniti";
                facet = new Facet(header, footer);
                columns.add(facet);
        }
        public ArrayList<DemoInventoryItem[]> getModel() {
                if (model == null) {
                        model = new ArrayList<DemoInventoryItem[]>();
                        for (int i = 0; i < 9; i++) {
                                DemoInventoryItem[] items = new DemoInventoryItem[6];
                                items[0] = createCar("Chevrolet", "Corvette", 1).get(0);
                                items[1] = createCar("Ford", "Explorer", 1).get(0);
                                items[2] = createCar("Nissan", "Maxima", 1).get(0);
                                items[3] = createCar("Toyota", "Camry", 1).get(0);
                                items[4] = createCar("GMC", "Yukon", 1).get(0);
                                items[5] = createCar("Infiniti", "G35", 1).get(0);
                                model.add(items);
                        }
                }
                return model;
        }
        public ArrayList<Facet> getColumns() {
                return columns;
        }
        public int getScrollerPage() {
                return scrollerPage;
        }
        public void setScrollerPage(int scrollerPage) {
                this.scrollerPage = scrollerPage;
        }
        public SortOrder getOrder() {
                return order;
        }
        public void setOrder(SortOrder order) {
                this.order = order;
        }
        public DemoInventoryItem getCurrentItem() {
                return currentItem;
        }
        public void setCurrentItem(DemoInventoryItem currentItem) {
                this.currentItem = currentItem;
        }
        public int getCurrentRow() {
                return currentRow;
        }
        public void setCurrentRow(int currentRow) {
                this.currentRow = currentRow;
        }
        public void store() {
                allCars.set(currentRow, currentItem);
                keys.clear();
                keys.add(currentRow);
        }
        public void delete() {
                allCars.remove(currentRow);
        }
        public Set<Integer> getKeys() {
                return keys;
        }
        public void setKeys(Set<Integer> keys) {
                this.keys = keys;
        }
}