Hi,

i would like to build up a stateless page for collecting an itemId and an amount from my user. The website should act as a direct shopping formular. The user only should insert the data
and on form submission the itemId is checked for existence.
A helper button should clear the field values from the appropriate row. All has to work
without any javascript.

My intention was that i create the stateless page, present it to the user, collect the data, submit the form, clear the row data and present the stateless page again to the user
with data in row cleared. But i don't get it to work.

My question: If i post the form an page is coming back everything is recreated and the values from the page parameters are not deployed to appropriate components automatically.
Do i have to do this by hand? Or is there a way?

I use wicket 1.4.17.

Thanks for helping me
Mike

<code>
HomePage.java
import java.util.Arrays;
import java.util.List;

import org.apache.wicket.PageParameters;
import org.apache.wicket.devutils.stateless.StatelessComponent;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.StatelessForm;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.PropertyModel;

@StatelessComponent
public class HomePage extends WebPage {

    public HomePage(final PageParameters parameters) {
        super(parameters);
        final StatelessForm<?> form;
        add(form = (StatelessForm<?>) new StatelessForm<Void>("form"));
        form.add(new ListView<ItemModel>("item", items()) {

            @Override
            protected void populateItem(final ListItem<ItemModel> item) {
item.add(new TextField<String>("itemId", new PropertyModel<String>(item.getModel(), "itemId"))); item.add(new TextField<Integer>("amount", new PropertyModel<Integer>(item.getModel(), "amount")));
                item.add(new Button("clearContent") {
                    @Override
                    public void onSubmit() {
                        item.getModelObject().clear();
                    }
                });
            }
        }.setReuseItems(true));
    }

    private List<ItemModel> items() {
        return Arrays.asList(new ItemModel(0), new ItemModel(1));
    }
}
</code>

ItemModel.java
<code>
import org.apache.wicket.util.string.Strings;

public class ItemModel {

    private String _itemId = null;
    private int _amount = 1;
    private int _pos = 0;

    public ItemModel(int pos) {
        _pos = pos;
        System.out.println(this);
    }

    public ItemModel(String key) {
        if (!Strings.isEmpty(key)) {
            String[] parts = key.split("-");
            setPos(Integer.valueOf(parts[0]).intValue());
            setItemId(String.valueOf(parts[1]));
            setAmount(Integer.valueOf(parts[2]).intValue());
        }
    }

    public int getAmount() {
        return _amount;
    }

    public void setAmount(int amount) {
        _amount = amount;
    }

    public String getItemId() {
        return _itemId;
    }

    public void setItemId(String itemId) {
        _itemId = itemId;
    }

    public int getPos() {
        return _pos;
    }

    public void setPos(int pos) {
        _pos = pos;
    }

    public String createKey() {
StringBuilder key = new StringBuilder().append(getPos()).append("-").append(getItemId()).append("-").append(getAmount());
        return key.toString();
    }

    public void clear() {
        setItemId(null);
        setAmount(1);
    }
}
</code>

HomePage.html
<code>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"; >
<head>
<title>Wicket Quickstart Archetype Homepage</title>
</head>
<body>
<strong>Wicket Quickstart Archetype Homepage</strong>
<br/><br/>
<a href="/">Home</a>
<form wicket:id="form">
<table>
<tr>
<td>Item</td>
<td>Amount</td>
<td>Clear content</td>
</tr>
<tr wicket:id="item">
<td><input wicket:id="itemId" /></td>
<td><input wicket:id="amount" /></td>
<td><input type="submit" wicket:id="clearContent" /></td>
</tr>
</table>
</form>
</body>
</html>
</code>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to