This is the code:

........
public class ListProductPage extends WebPage {
    
    public ListProductPage() {
        add(new Link("createLink") {

            /**
             * Go to the Edit page when the link is clicked, passing an
empty
             * Product details
             */
            public void onClick() {
                //setResponsePage(new EditProductPage(getPage(), 0));
            }
        });

        IColumn[] columns = new IColumn[3];

        /*
         * This is a composite column, created by extending
         * FilteredAbstractColumn. This column adds a UserActionsPanel as
its
         * cell contents. It also provides the go-and-clear filter control
         * panel.
         */
        columns[0] = new FilteredAbstractColumn(new Model("Actions")) {

            // add the UserActionsPanel to the cell item
            public void populateItem(Item cellItem, String componentId,
                    IModel model) {
                Product product = (Product) cellItem.getModelObject();
                cellItem.add(new UserActionsPanel(componentId, product));
            }

            // return the go-and-clear filter for the filter toolbar
            public Component getFilter(String componentId, FilterForm form)
{
                return new GoAndClearFilter(componentId, form);
            }
        };

        // creates a column with a text filter
        columns[1] = new TextFilteredPropertyColumn(new
Model("Description"),
                "description", "description");

        columns[2] = new TextFilteredPropertyColumn(new Model("Price"),
                "price");


        // set up data provider
        ProductDataProvider dataProvider = new ProductDataProvider(.....);

        // create the data table
        DefaultDataTable products = new DefaultDataTable("products",
Arrays.asList(columns), dataProvider, 10);

        //products.addTopToolbar(new FilterToolbar(products, dataProvider));
        add(products);

    }

public class ProductDataProvider extends SortableDataProvider implements
        IFilterStateLocator {

    /** dao that will be used to retrieve the list of Products */
    private ProductDao dao;
    /** reuse the Product entity to store filter information */
    private Product filter = new Product();

    public Object getFilterState() {
        return filter;
    }

    public void setFilterState(Object state) {
        filter = (Product) state;
    }
    

    public ProductDataProvider(ProductDao dao) {
        this.dao = dao;

        // set the default sort
        setSort("description", true);
    }

    /**
     * Gets an iterator for the subset of Products.
     * 
     * @param first
     *            offset for the first row of data to retrieve
     * @param count
     *            number of rows to retrieve
     * @return iterator capable of iterating over {first, first+count}
Products
     */
    public Iterator iterator(int first, int count) {
        QueryParam qp = null;

        SortParam sp = getSort();
        qp = new QueryParam(first, count, sp.getProperty(),
sp.isAscending());

        return dao.find(qp, filter);
    }

    /**
     * Gets total number of items in the collection.
     * 
     * @return total item count
     */
    public int size() {
        return dao.count(filter);
    }

    /**
     * Converts the object in the collection to its model representation. A
good
     * place to wrap the object in a detachable model.
     * 
     * @param object
     *            The object that needs to be wrapped
     * @return The model representation of the object
     */
    public IModel model(Object object) {
        return new DetachableModelProduct((Product) object, dao);
    }
}

public class DetachableModelProduct extends LoadableDetachableModel {
    //make it transient, so that it will not get serialized.
    private transient Product product;
    private final ProductDao dao;
    private final Integer id;

    @Override
    public Object getObject() {
        return this.product;
    }

    public DetachableModelProduct(Product product, ProductDao dao) {
        this(product.getId(), dao);
        this.product = product;
    }

    public DetachableModelProduct(Integer id, ProductDao dao) {
        if (id == 0) {
            throw new IllegalArgumentException();
        }
        this.id = id;
        this.dao = dao;
    }

    
    /**
     * Returns null to indicate there is no nested model.
     * @return Null
     */
    public IModel getNestedModel() {
    return null;
    }
    
    /**
     * Uses the DAO to load the required product when the model is attatched
to the request.
     */
    protected void onAttach() {
    product = dao.load(id);
    }
    
    /**
     * Clear the reference to the product when the model is detatched.
     */
    protected void onDetach() {
    product = null;
    }
    
    /**
     * Called after attatch to return the detatchable object.
     * @param component  The component asking for the object
     * @return The detatchable object.
     */
    protected Object onGetObject(Component component) {
    return product;
    }
    
    
    @Override
    protected Object load() {
    return dao.getProductList();
    }
}

The instruction on bold is my first problem.

It's two days the i find a solution. %-| :,(
-- 
View this message in context: 
http://www.nabble.com/Help-on-create-a-list-with-dataview-tp18852545p18852545.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to