Стоп JSF Event Chain
Я работаю над модификацией приложения jsf-1.2 для использования на планшетном ПК.
Для этого я сделал клики по строкам таблицы, чтобы открыть детальное представление содержимого строк, вместо того, чтобы пользователь нажимал на ссылку в этой таблице (что имеет место в версии для настольных компьютеров).
Пока все отлично работает. Однако каждая строка может содержать две многофункциональные кнопки, которые открывают разные ссылки.
Содержимое этой ссылки открывается в новой вкладке, как и предполагалось. Моя проблема в том, что событие действия щелчка строки также активируется на исходной вкладке, что не является предполагаемым поведением.
Теперь я хочу остановить событие, если нажата одна из кнопок в строке.
Я уже знаю, что событие butons запускается до события rowclick. Есть ли способ просто отрезать цепочку событий на этом этапе?
2 ответа
Это происходит из-за Event Bubbling. Попробуйте использовать Event.stop(event);
в вашем commandButton
как ниже.
<a4j:commandButton onclick="Event.stop(event);" action="#{myBean.myMethod())}" value="Show" />
Я не знаю, сможете ли вы разорвать цепь - но даже если это возможно (возможно, с помощью исключения) - я бы порекомендовал против этого.
Правильный (к сожалению) способ сделать это в среде, управляемой событиями, это установить некоторые boolean
индикатор, чтобы быть истинным, когда обработчик для кнопки срабатывает, и установить его обратно в ложь, когда обработчик завершает свою работу. В обработчике для row-clicked
событие, вы должны проверить, если boolean
истина - и только если она ложна - продолжить обработку row-clicked
событие.
Предлагаемое имя для логического: isRowButtownClicked
Отказ от ответственности: я основываю этот ответ на своих знаниях в C# - у меня нет никакого опыта в разработке GUI на Java и, в частности, не в JSF.