Хобрук: Ваш путь к мастерству в программировании

Окно ZK не уникально в пространстве ID

В нашем проекте мы используем ZK для веб-страниц. Существует combobox, в котором есть списки. При выборе он извлекает данные из объекта Java через onSelect, я дал логику. когда я выбираю один, на этой странице есть 4 listboxes, которые должны быть заполнены данными в соответствии с выбором. когда я выбираю первый раз, проблем не возникает.

Но во второй раз я получаю всплывающее окно с ошибкой, например «Не уникально в пространстве идентификаторов окна», и показывая идентификатор элемента списка, который должен быть заполнен при выборе.

Может ли кто-нибудь помочь там?

Примечание. Хотя это показывает эту ошибку, я правильно заполнил listboxes в соответствии с выбором поля со списком. Тем не менее я не могу остановить эту ошибку.

17.04.2012

  • Можете ли вы опубликовать свой ZUL и, возможно, некоторую связанную с ним логику? 17.04.2012
  • Если вы используете архитектуру MVVM, не используйте атрибут id на странице zul. 14.05.2013

Ответы:


1

Ваша проблема связана с конфликтом идентификаторов в ZK id space.

Немного предыстории..

ZK генерирует идентификаторы для компонентов во время выполнения, если вы откроете DOM в браузере, вы увидите, что каждый компонент имеет некоторый машиночитаемый идентификатор.

Однако вы также можете дать компонентам идентификатор. Этот идентификатор не переходит в DOM, но позволяет вам ссылаться на компонент в вашем приложении.

Этих двоих не следует путать. Конфликт, с которым вы столкнулись, связан с идентификатором последнего типа; вы назначаете компоненту идентификатор в своем коде Java или в файле ZUL, который во время выполнения не уникален.

Случай, который вы описываете, когда это происходит только во второй раз, когда вы нажимаете, является явным признаком здесь. Контент, который вы добавляете в событие, имеет определенный в нем идентификатор, и вы не удаляете этот контент, когда закончите.

Рассмотрим следующий пример:

@Wire
private Window myWindow;

@Listen(Events.ON_CLICK + " = #myButton")
public void onMyButtonClicked() {
    Label myLabel = new Label("sean is cool");
    myLabel.setId("myLabel");
    myLabel.setParent(myWindow);
}

Это сработает при первом нажатии myButton, но выдаст ошибку при втором нажатии. Это потому, что второе событие пытается добавить myLabel к myWindow, но там уже есть myLabel.

Есть много способов решить эту проблему в зависимости от того, что вы пытаетесь сделать.
Просмотрите документацию ZK на Пространства ID, чтобы узнать больше.

11.05.2013

2

Я также столкнулся с той же ошибкой. Мой сценарий такой же, только используемые виджеты разные. Поэтому размещаю здесь мой обходной путь.

Я поместил следующий фрагмент кода в метод doBeforeCompose() композитора:

Component widgetWithId = page.getFellowIfAny("widgetWithId");
if (widgetWithId != null) {
    widgetWithId.detach();
}

Здесь widgetWithId — это компонент/виджет, который пытается перегенерироваться кодом, с тем же Id, и ZK выдает для него ошибку.

16.04.2020
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..