1

当用户单击我的 ListView 的一个项目时,我希望它加载另一个页面,其中包含单击行的信息。我尝试将 onClick 事件添加到项目中,如下所示:

item.add(new AjaxFormValidatingBehavior(ClientSearchForm.this, "onclick") {

    @Override
    protected void onSubmit(AjaxRequestTarget target) {

        ClientPage.this.setResponsePage(new EditClientPage());
    }
});

但我不确定如何加载我的其他页面。我应该只需要实例化它吗?

编辑:使用上面的代码有效,但它仅在单击第一项时加载。

按要求提供 HTML。

<table border="1" wicket:id="clientTable" id="client-table">
                    <tr wicket:id="clientRow" id="client-row">
                        <td>
                            <span wicket:id="row1"></span>
                        </td>

                        <td>
                            <span wicket:id="row2"></span>  
                        </td>
                    </tr>
                </table>
4

1 回答 1

2

我做了一些测试,你的解决方案对我来说很好。

所以我怀疑问题出在你的标记中,它可能不支持 onclick 事件。

这是我的工作示例:

public class HomePage extends WebPage {

    public HomePage(final PageParameters parameters) {

        add( new Label( "label", parameters.getString( "param")));

        add( new ListView( "list", Arrays.asList( "foo", "bar") ) {
            @Override
            protected void populateItem(final ListItem item) {
                item.add( new Label( "label", "item model is "+item.getModelObject() ) );
                item.add( new AjaxEventBehavior( "onclick") {

                    @Override
                    protected void onEvent(AjaxRequestTarget target) {
                        PageParameters pp = new PageParameters( "param="+item.getModelObject() );
                        setResponsePage( new HomePage( pp ) );
                    }
                });

            }
        });
    }
}

和html:

<html>
    <head>
        <title>Wicket Quickstart Archetype Homepage</title>
    </head>
    <body>
        <span wicket:id="label">message will be here</span>
        <div wicket:id="list">Static stuff and <span wicket:id="label">dynamic stuff</span></div>
    </body>
</html>
于 2012-08-29T20:49:07.900 回答