как отлаживать JSF / EL - PullRequest
       15

как отлаживать JSF / EL

43 голосов
/ 25 ноября 2011

Как отлаживать EL на странице JSF?Я хотел бы посмотреть значения переменных, вызовы функций и так далее.Лучшим решением был бы плагин Eclipse, но любая другая возможность лучше, чем гадать «Почему это выражение не удалось правильно отобразить?».

Ответы [ 2 ]

68 голосов
/ 25 ноября 2011

Самое близкое, что вы можете получить в JSF / Facelets - это разместить <ui:debug /> где-нибудь на виде:

<ui:debug />

Нажатие Ctrl Shift D должен отобразить всплывающее окно с отладочной информацией о дереве компонентов и всеми доступными параметрами запроса и переменными области запроса / просмотра / flash / сессии / приложения.Это в основном представление содержимого всех этих карт.

Горячая клавиша, кстати, настраивается атрибутом hotkey, так что вы можете выбрать другую, когда она конфликтует с горячими клавишами браузера по умолчанию, как это было бы в Firefox.; Ctrl Shift D по умолчанию отображает диалог Добавление закладок .Вот как вы можете прослушать Ctrl Shift X вместо этого:

<ui:debug hotkey="x" />

Обычно вы также хотели бы скрыть этона этапе не разработки, поэтому добавьте условие рендеринга следующим образом:

<ui:debug hotkey="x" rendered="#{facesContext.application.projectStage == 'Development'}" />

В показанной отладочной информации предоставленная информация о переменных области действия не так хороша, как вы ожидаете.Он показывает только Object#toString() результат всех переменных области действия, который по умолчанию равен com.example.Bean@hashcode.Вы не можете исследовать их свойства и значения их свойств напрямую, как это можно сделать в режиме отладки отладчика Eclipse.Вам нужно было бы соответственно реализовать toString() в классе, чтобы возвращалось как можно больше релевантной информации (при необходимости вы даже можете позволить Eclipse автоматически генерировать ее, щелкнув правой кнопкой мыши по исходному коду> Source> Generate toString () ):

@Override
public String toString() {
    return String.format("Bean[prop1=%s,prop2=%s,prop3=%s]", prop1, prop2, prop3);
}

Что касается вызовов методов, просто установите точку останова в исходном коде Java обычным способом.Eclipse также активируется, когда EL вызывает метод.Если это управляемый компонент, вы также просто увидите его свойства в отладчике Eclipse.

5 голосов
/ 26 ноября 2011

Если у вас действительно есть проблемы, то если вы можете получить источник для реализации EL (достаточно легко для RI), тогда вы можете использовать Eclipse для установки точек останова в методах реализации EL.Вам нужно понять, как работает код EL, но это не , что сложно.Но не для слабонервных.

Другой возможностью было бы создание и оценка EL программно.Есть примеры того, как это сделать.Затем вы можете использовать отладчик, чтобы поэкспериментировать с выражением и его результатом до тех пор, пока не решите, в чем заключается ваша проблема.

...