Как использовать несколько тем одновременно - PullRequest
3 голосов
/ 21 февраля 2012

Я ищу способ использовать несколько тем в одном приложении XPages, каждая тема активна в отдельном разделе приложения. Например, для поддержки одного приложения .nsf с общедоступным веб-сайтом (пользовательская тема) и CMS с темой OneUI.

Вы можете указать, какая тема будет использоваться во всем приложении, на вкладке Свойства XPage в Свойства приложения. Также можно изменить тему сеанса пользователя с помощью этого кода:

context.setSessionProperty("xsp.theme", <theme_id>)

Но оба параметра задают тему для всех страниц в текущем .nsf, и я ищу способ указать тему X для одной части приложения и тему Y для второй части.

Возможно ли это?

Ответы [ 5 ]

3 голосов
/ 02 мая 2013

Я попробовал все вышеперечисленное, но ни один из них не работал для меня. Но я нашел решение:

Вставьте это в событие beforeRenderResponse представления:

context.setSessionProperty("xsp.theme", "yourAlternateThemeName")

Существует одна проблема: после того, как вы использовали этот способ, вы должны использовать его всегда и на каждой странице, поскольку это устанавливает свойство сеанса, которое сохраняется до тех пор, пока вы вошли в систему.

3 голосов
/ 21 февраля 2012

На любой странице, которая должна использовать альтернативную тему, используйте следующий синтаксис, чтобы применить свойство непосредственно к корню представления:

<xp:view>
<xp:this.properties>
<xp:parameter name="xsp.theme" value="alternateThemeName" />
</xp:this.properties>
</xp:view>
1 голос
/ 22 февраля 2012

Хотя мне нравится идея иметь темы для конкретной страницы, основанные на конкретном случае использования, который вы описываете, «правильный» способ сделать это - привязать два отдельных приложения XPage к одному и тому же внутреннему хранилищу данных.Это не только упрощает определение отдельной темы для каждой, но и упрощает ACL (при условии, что у вас есть разные люди, которые получают доступ к общедоступному сайту по сравнению с CMS), упрощает настройку производительности благодаря различным настройкам для каждого приложения.и даже без наличия специфичных для приложения настроек следует немного повысить производительность только из-за поведения загрузчика классов Java: каждый NSF действует как отдельный ClassLoader, а каждый XPage или пользовательский элемент управления в NSF приводит к хранению отдельного файла класса.Таким образом, теоретически, если функции вашего общедоступного сайта требуют от вас создания 5 XPages, а функции CMS охватывают 10 XPages, простое разделение их на два отдельных приложения облегчает загрузчику классов поиск класса для любой страницы, загружаемой пользователем.потому что он не должен игнорировать классы, которые ему никогда не понадобятся для этого пользователя, просто чтобы найти тот класс, который ему нужен в данный момент.Таким образом, я все еще испытываю желание найти способ заставить темы для конкретной страницы работать только для этого «крутого» фактора, но для этой конкретной цели я бы рекомендовал использовать два разных приложения полностью, с разными темами, назначенными каждому.

1 голос
/ 21 февраля 2012

Только что поговорил с коллегой Тони Макгукиным.

Вы можете изменить тему на странице.Под всеми свойствами XPage выберите data-properties и создайте новое свойство с именем «xsp.theme» и значением «yourThemeName».

0 голосов
/ 21 февраля 2012

Я не очень много знаю о темах, но не могу ли вы проверить свою тему (с некоторыми ssjs), на каком уровне просмотра (по id?) Вы находитесь и, в соответствии с этим, включать в себя правильные стили, CSS и другие ресурсы?

...