Как динамически обновлять всплывающие подсказки JSF2.0 (Primefaces) без перезапуска сервера - PullRequest
1 голос
/ 12 июля 2011

Мне нужно динамически обновлять подсказки JSF2.0 (Primefaces) без перезапуска сервера.

Имеется в виду необходимость найти способ, с помощью которого всплывающие подсказки (атм из файла свойств) работающего приложения могут быть изменены без необходимости перезапуска сервера.

Мы запускаем websphere и внедряем неразорванный EAR(возможно, убедит развернуть взорвавшуюся войну)

Любые идеи или советы, пожалуйста.Спасибо тебе

1 Ответ

4 голосов
/ 12 июля 2011

Атрибут value компонента p:toolTip должен быть выражением EL или литеральным текстом.Обычно можно ссылаться на пакет ресурсов, объявленный с использованием атрибута var тега f:loadBundle, в выражении EL для всплывающей подсказки.

Базовый пакет ресурсов, объявленный с использованием атрибута basename, может быть поддержансамим файлом свойств (в этом случае вам нужно поместить файл свойств в соответствующий каталог на пути к классам), или в этом отношении это может быть пользовательская реализация ResourceBundle, которая может считывать данные из файла свойств (расположенного вне контейнера),или база данных или любое хранилище по этому вопросу.

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

<f:loadBundle var="msg" basename="propfile_location" />

на

<f:loadBundle var="msg" basename="fully qualified class name of the ResourceBundle class" />

Проще говоря, вам нужно будет свернуть свой собственный класс (ы) ResourceBundle для поддержки различных локалей.Нет необходимости указывать, но вам нужно переопределить метод ResourceBundle.getObject(java.lang.String), так как он вызывается реализацией ResourceBundleELResolver при оценке выражений EL, ссылающихся на ResourceBundles.

Кроме того, вам необходимо убедиться, что реализация ResourceBundle.getObject(java.lang.String) вашего ResourceBundle всегда будет повторно извлекать и возвращать значение, соответствующее предоставленному ключу.Если это не будет гарантировано, это будет означать, что начальное значение, полученное пакетом ресурсов, может быть возвращено при последующих вызовах, особенно если вы кэшируете начальное значение.Вы, вероятно, столкнетесь с таким поведением, даже если развернете разорванный WAR-файл, в котором вы сможете изменить содержимое файла свойств без повторного развертывания приложения, и поэтому важно использовать собственную реализацию ResourceBundle, которая не кэширует значения.

...