【问题标题】:Wicket - How to call another page using a ListView itemsWicket - 如何使用 ListView 项目调用另一个页面
【发布时间】:2012-08-29 15:55:45
【问题描述】:

当用户点击我的 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>

【问题讨论】:

  • 您遇到问题的部分是什么?为不同的项目设置不同的页面?
  • @biziclop 我实际上希望所有项目都加载同一个页面(EditClientPage 将在构造函数中接收一个变量)。问题是使用这种方法只有第一项加载页面。
  • 我明白了。将Link 添加到项目中如何,以及您当前添加到项目中的所有内容,您都在链接下添加?为简单起见,链接的标记应为 &lt;div&gt;
  • 您的代码应该可以正常工作。当您单击与第一个不同的项目时,您是否收到任何 JavaScript 错误?
  • @AndreaDelBene 没有错误。我实际上设法使用 AjaxEventBehavior 让它工作。但我仍然对为什么这不适用于 AjaxFormValidatingBehavior 感到困惑。

标签: java html wicket


【解决方案1】:

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

所以我怀疑问题出在您的标记中,它可能不支持 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>

【讨论】:

  • 这才是重要的区别。很高兴知道。
  • 好的,非常感谢。但是为什么在另一个事件中只有第一行在使用 onclick 对我来说仍然是一个谜。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 2020-12-30
  • 1970-01-01
  • 2013-02-18
  • 2020-11-09
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多