2013-12-06 5 views
2

У нас есть 2 приложения: клиентское приложение и приложение администратора. Пользователь в приложении администратора может изменить тему клиентского приложения.
Если тема содержит изображение и кожу, тогда это выполнимо. Image servlet использует для чтения изображения из БД на лету, и скин меняется динамически. Я уже реализовал его.
Задача сложнее: у администратора должна быть возможность настроить ANY параметров кожи.
Environment: JSF 2, RichFaces 4.3

Мы можем сохранить параметры и создать новый файл кожи, но в этом случае мы должны перераспределить клиентское приложение (которое не является лучшим решением - уже реализована для пользовательской кожи).
Мы можем изменить CSS на лету, но это большое количество классов (для всех компонентов RichFaces).
Вопрос: мы можем заменить значение параметра кожи (не CSS, ECSS, XCSS) на лету?Как заменить значение параметра skin на лету в Richfaces 4.3?

+1

Для вдохновения будет использоваться [Возможно ли использовать компонент ApplicationScoped, который защищает приложение JSF 2 с помощью оболочки с богатыми поверхностями?] (Http://stackoverflow.com/questions/15098394/possible-to-have-an-applicationscoped- bean-that-skins-a-jsf-2-application-with-a) –

ответ

1

Изменение параметров кожи на лету не поддерживается.

Скиннинг работает с ресурсами, созданными из файла скина (изображения и файлы CSS) во время сборки. Вам придется создавать новые ресурсы каждый раз, когда вы измените параметр skin.

Вы можете создать кучу скинов заранее, но если вы хотите разрешить пользователю изменять каждую деталь, нет простого решения.

+0

Спасибо @Makhiel. Я уже реализовал выбор скина из набора скинов по умолчанию или введите собственное имя скина. И пользовательские параметры скина загружаются в случае, если файл скина уже существует в ресурсах приложений. Если пользовательский файл скина не существует, используется скин по умолчанию. Все это прекрасно работает. Одно неудобство состоит в том, что кому-то нужно создать файл скина, добавить его в приложение и повторно развернуть приложение. –