Java 将单击行为添加到非锚定构件而不使用链接构件

Java 将单击行为添加到非锚定构件而不使用链接构件,java,wicket,Java,Wicket,我有一个数据视图,它的html是这样的: <table> <thead> <tr> <td>Username</td> <td>First Name</td> <td>Last Name</td> </tr> </thead> <tbody> <tr wicke

我有一个
数据视图
,它的html是这样的:

<table>
<thead>
    <tr>
        <td>Username</td>
        <td>First Name</td>
        <td>Last Name</td>         
   </tr>
</thead>
<tbody>
    <tr wicket:id="dataView">
         <td wicket:id="username">Username</td>
         <td wicket:id="firstName">First Name</td>
         <td wicket:id="lastName">Last Name</td>         
    </tr>
</tbody>
</table>

用户名
名字
姓
用户名
名字
姓

我的目标是让整行都可以点击。我会使用
链接
组件,但我不能-数据视图中的每个
元素都已经是
。当
链接未附加到
标记时,是否有一种简单的方法附加该链接所获得的行为?即,它生成javascript以执行链接功能的行为

选项1:为每个项目添加一个“onclick”
AjaxEventBehavior

new DataView<T>(id, dataProvider) {

    @Override
    protected void populateItem(Item<T> item) {

        item.add(new AjaxEventBehavior("onclick") {

            @Override
            protected void onEvent(AjaxRequestTarget target) {
                // This will execute when row is clicked
            }

        });

        // Continue populating item here
    }
}
newdataview(id,dataProvider){
@凌驾
受保护的无效填充项(项){
添加(新的AjaxEventBehavior(“onclick”){
@凌驾
受保护的void onEvent(AjaxRequestTarget目标){
//这将在单击行时执行
}
});
//继续在此处填充项目
}
}

选项2:如果不想使用Ajax,可以将每行中的所有单元格作为指向同一对象的链接,然后使用CSS使链接占据整个单元格空间。查看此项。

选项1:在每个项目中添加一个“onclick”
AjaxEventBehavior

new DataView<T>(id, dataProvider) {

    @Override
    protected void populateItem(Item<T> item) {

        item.add(new AjaxEventBehavior("onclick") {

            @Override
            protected void onEvent(AjaxRequestTarget target) {
                // This will execute when row is clicked
            }

        });

        // Continue populating item here
    }
}
newdataview(id,dataProvider){
@凌驾
受保护的无效填充项(项){
添加(新的AjaxEventBehavior(“onclick”){
@凌驾
受保护的void onEvent(AjaxRequestTarget目标){
//这将在单击行时执行
}
});
//继续在此处填充项目
}
}

选项2:如果不想使用Ajax,可以将每行中的所有单元格作为指向同一对象的链接,然后使用CSS使链接占据整个单元格空间。请参阅。

注意,向每个表单元格添加
onclick
会生成大量Javascript代码,这可能会降低页面速度。@Angstatt530使用ajax行为不会导致标准链接的开销比必要的开销大得多?@RobAu因为该行为会添加到每个
项上
,它只为每一行生成,而不是为每个单元格生成(这是可以的)。为了获得更好的性能:您可以将
onclick
添加到表中,并编写一些自定义JavaScript来获取所单击元素的父元素,直到到达
TR
。此
TR
应具有
id
(setOutputMarkupId(true))。然后,您可以将此
id
作为额外参数传递给行为,并在wicket中找到组件树中匹配的
TR
。另请参见此示例:@WiseTree I添加了第二个选项,以防您尝试不使用Ajax。只需使用
BookmarkablePageLink
,而不是像我的示例所示在HTML中硬编码链接。请注意,向每个表单元格添加
onclick
,将生成大量Javascript代码,这可能会减慢页面的速度。@Angstat530不会使用ajax行为会导致标准链接的开销大得多?@RobAu因为行为将添加到每个
Item
,因此它只会为每行生成,而不是单元格(这是正常的ish)。为了获得更好的性能:您可以将
onclick
添加到表中,并编写一些自定义JavaScript来获取单击元素的父元素,直到到达
TR
。此
TR
应具有
id
(setOutputMarkupId(true))。然后,您可以将此
id
作为额外参数传递给行为,并在wicket中找到组件树中匹配的
TR
。另请参见此示例:@WiseTree I添加了第二个选项,以防您尝试不使用Ajax。只需使用
BookmarkablePageLink
,而不是像我的示例所示在HTML中硬编码链接。