zk线多组件

时间:2018-12-11 17:01:19

标签: java zk zul

我正在尝试在<button>字段中连接多个List<Button>(ZUL标记)。 目的是创建多个按钮以删除用户列表中列出的用户。 当有人单击按钮时,控制器应处理一个onClick事件,以便调用该模型,该模型将删除数据库中的用户。

问题是:

  1. 我不知道<button>是否真的接线。
  2. @Listen("onClick = button")声明的事件处理程序不起作用。

我不知道问题出在自动装配过程中还是事件处理上,或者两者都有。

backend.zul

请注意,每一行都有一个删除按钮,其中id=""与用户ID匹配。我需要这样做以便检索用户ID并删除具有该ID的记录。 (很抱歉,这不是最好的方法)。

<?page title="Admin Backend" contentType="text/html;charset=UTF-8"?>
<?init class="zk_auth.controller.AuthenticationInitiator"?>
<zk>
<window title="Admin Backend" border="normal" apply="zk_auth.controller.UsersListController">
<listbox id="AllUsers" emptyMessage="No user found">
    <listhead>
        <listheader label="Email" sort="auto" />
        <listheader label="Name" sort="auto" />
        <listheader label="Surname" sort="auto" />
        <listheader label="Role" sort="auto" />
        <listheader />
    </listhead>
    <template name="model">
        <listitem>
            <listcell label="${each.email}" />
            <listcell label="${each.name}" />
            <listcell label="${each.surname}" />
            <listcell label="${each.role}" />
            <listcell>
                <button label="Delete" sclass="delete_user" id="${each.id }" />
            </listcell>
        </listitem>
    </template>
</listbox>
<button label="Test" id="TestButton" />
</window>
</zk>

zk_auth.controller.UsersListController

//Omitted imports for brevity

public class UsersListController extends SelectorComposer<Component>
{
    private static final long serialVersionUID = 1L;

    // Not fucus on this.
    @Wire
    private Listbox AllUsers;

    // Here is the problem
    // This is the collection wired to all delete buttons.
    @Wire("button")
    private List<Button> DeleteButtons;

    // This button works!
    @Wire
    private Button TestButton;

    // Not focus on this. It lists all the users and it works.
    @Listen("onCreate = #AllUsers")
    public void ListAllUsers()
    {
        UserModel Users = new UserModel();
        List<User> UsersList = new ArrayList<User>(Users.getAllUsers());
        AllUsers.setModel(new ListModelList<User>(UsersList));
    }

    // Here is the problem
    // This doesn't work. I also tried
    // @Listen("onClick = button.delete_user")
    @Listen("onClick = button")
    public void DeleteUser(MouseEvent event)
    {
        Messagebox.show("It works!");
    }

    // This simple autowiring works. It targets only one button with id="TestButton".
    // No conflict with other onClick event handler, if you delete the test
    // nothing change.
    @Listen("onClick = #TestButton")
    public void Test()
    {
        Messagebox.show("It works!");
    }
}

结果

That's the rendered page, just for clarity

结论

控制台日志显示无错误或警告。我犯错了吗?如何通过多个按钮触发多个onClick事件并使用一个事件处理程序处理该事件?

1 个答案:

答案 0 :(得分:0)

所以,让我先解释一下为什么在您的案例的重要阶段不起作用:
1.创建页面。
2.连接页面上的所有组件。
3.加载日期,然后在页面中填写数据。

由于您使用了<template>,因此它是在第3阶段呈现的,因此此时不再进行任何接线。

我已更新existing fiddle,运行并按两次搜索。他将始终给出列表中按钮的大小。
因此,如您所见,它一直有1个按钮。

解决方案:

事件转发,如this forum topic中的cor3000所述: 这是a fiddle example