Остановить цепочку событий JSF

Я работаю над изменением приложения jsf-1.2 для использования на планшетном ПК.

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

Пока работает нормально. Однако каждая строка может содержать две многофункциональные кнопки, которые открывают разные ссылки.

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

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

Я уже знаю, что событие кнопок запускается до события rowclick. Есть ли способ просто сократить цепочку событий на этом этапе?


person Julius Caesar    schedule 10.12.2012    source источник
comment
Привет, вы можете опубликовать образец кода проблемной области - это поможет людям быть более конкретными в своих ответах.   -  person Jeff    schedule 11.12.2012
comment
Требуется дополнительная информация, особенно о механизме, который вы использовали, чтобы сделать строку интерактивной. Вы используете атрибут onRowClick?   -  person prageeth    schedule 11.12.2012


Ответы (2)


Это происходит из-за всплытия событий. Попробуйте использовать Event.stop(event); в своем commandButton, как показано ниже.

<a4j:commandButton onclick="Event.stop(event);" action="#{myBean.myMethod())}" value="Show" />
person prageeth    schedule 11.12.2012

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

Правильный (к сожалению) способ сделать это в среде, управляемой событиями, - это установить для некоторого индикатора boolean значение true, когда обработчик кнопки срабатывает, и установить его обратно на false , когда обработчик завершит свою работу. В обработчике события row-clicked вам необходимо проверить, является ли boolean истинным - и только если оно ложно - продолжить обработку события row-clicked.

Предлагаемое имя для логического: isRowButtownClicked

Заявление об ограничении ответственности: я основываю этот ответ на своих знаниях в C # - у меня нет опыта разработки графического интерфейса пользователя на Java, особенно в JSF.

person RonK    schedule 10.12.2012