Я пытаюсь подключить несколько <button>
(тег ZUL) в поле List<Button>
.Цель состоит в том, чтобы создать несколько кнопок для удаления пользователя, указанного в списке пользователей.Когда кто-то нажимает кнопку, контроллер должен обработать событие onClick
, чтобы вызвать модель, которая удалит пользователя из базы данных.
Проблемы:
- Iне знаю, действительно ли
<button>
s связаны. - Не работает обработчик событий, объявленный с помощью
@Listen("onClick = button")
.
Я не знаю, в чем проблемапроцесс автоматической разводки, обработка событий или и то, и другое.
backend.zul
Обратите внимание, что в каждой строке есть кнопка удаления с 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!");
}
}
Результат
Это отрендеренная страница, просто для ясности
Вывод
Журнал консоли не показывает никаких ошибок или предупреждений.Я сделал какую-то ошибку?Как сделать несколько событий onClick
несколькими кнопками и обработать событие одним обработчиком событий?