Стоп 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.

Другие вопросы по тегам