Я хочу использовать Primefaces ThemeSwitcher. Мне интересно, как сохранить выбранную тему при перезагрузке веб-приложения. Например, как я могу установить имя темы как переменную из базы данных?Как сохранить тему в Primefaces
ответ
Я думаю, что установка выбрана тема сессии поможет:
session.setAttribute
Редактировать web.xml с помощью кода:
http://illegalargumentexception.blogspot.co.at/2008/08/java-using-xmlbeans-to-edit-webxml.html
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>EDITME</param-value>
</context-param>
Или создать метод перед загрузкой страницы, чтобы выбрать тема из db. (очищающее решение)
Вам не понадобится ThemeSwitcher, чтобы добиться такого упорства, которое вы ищете.
Просто выполните поиск базы данных для темы в ServletContextListener, а затем сохранить значение в контексте сервлета, возможно перекрывая все, что вы установили в web.xml
public Class MyContextListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent sce){
String selectedTheme = myThemeDAO.getConfiguredTheme();
sce.getServletContext().setInitParameter("primefaces.THEME",selectedTheme);
}
}
связать компонент ThemeSwitcher к managedBean и добавить слушатель, связанный с Ajax события:
<h:form id="form-theme">
<p:themeSwitcher id="defaultSwitcher" value="#{themeSwitcherBean.theme}">
<f:selectItems value="#{themeSwitcherBean.themes}" />
<p:ajax listener="#{themeSwitcherBean.saveTheme}" />
</p:themeSwitcher>
</h:form>
в вашем managedbean создать метод, который называют saveTheme, что собирается вызвать класс сохраняться в базе данных, и называть класс для базы данных, когда начинают получить Тема, которые сохранены в базе данных:
@SessionScoped
@ManagedBean(name="themeSwitcherBean")
public class ThemeSwitcherBean implements Serializable{
private Map<String, String> themes;
private String theme;
private GuestPreferences gp;
private void setGp(GuestPreferences gp) {
this.gp = gp;
}
public Map<String, String> getThemes() {
return themes;
}
public String getTheme() {
return theme;
}
public void setTheme(String theme) {
this.theme = theme;
}
@PostConstruct
public void init() {
setGp(new GuestPreferences()); // persistent class
setTheme(gp.getTheme()); // theme from the database;
themes = new TreeMap<String, String>();
themes.put("Aristo", "aristo");
themes.put("Black-Tie", "black-tie");
themes.put("Blitzer", "blitzer");
themes.put("Bluesky", "bluesky");
themes.put("Bootstrap", "bootstrap");
themes.put("Casablanca", "casablanca");
themes.put("Cupertino", "cupertino");
themes.put("Dark-Hive", "dark-hive");
themes.put("Dot-Luv", "dot-luv");
themes.put("Eggplant", "eggplant");
themes.put("Excite-Bike", "excite-bike");
themes.put("Flick", "flick");
themes.put("Glass-X", "glass-x");
themes.put("Hot-Sneaks", "hot-sneaks");
themes.put("Humanity", "humanity");
themes.put("Le-Frog", "le-frog");
themes.put("Midnight", "midnight");
themes.put("Mint-Choc", "mint-choc");
themes.put("Overcast", "overcast");
themes.put("Pepper-Grinder", "pepper-grinder");
themes.put("Redmond", "redmond");
themes.put("Rocket", "rocket");
themes.put("Sam", "sam");
themes.put("Smoothness", "smoothness");
themes.put("South-Street", "south-street");
themes.put("Start", "start");
themes.put("Sunny", "sunny");
themes.put("Swanky-Purse", "swanky-purse");
themes.put("Trontastic", "trontastic");
themes.put("UI-Darkness", "ui-darkness");
themes.put("UI-Lightness", "ui-lightness");
themes.put("Vader", "vader");
}
public void saveTheme() {
gp.setTheme(theme); // theme to database
}
}
метод тема из класса GuestPreferences собирается сохраняться в базе данных
@SessionScoped
public class GuestPreferences {
public String getTheme(){
//return the theme from the database
}
public void setTheme(String theme){
//send the theme to the database
}
}
форму для отправки и получения данных из базы данных зависит от вас предпочитают:
*
JDBC * JTA
* JPA
, например, JTA, сделать persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="NAME-WHAT-YOU-WANT" transaction-type="JTA">
<provider>CLASS-OF-YOUR-PROVIDER</provider>
<jta-data-source>YOUR-DATASOURCE</jta-data-source>
<class>PATH-OF.GuestPreferences</class>
<properties>
<property name="NAME-OF-PROPERTY-TO-FORM-A-JDBC-URL" value="VALUE-OF-PROPERTY"/>
<property name="NAME-OF-PROPERTY-TO-FORM-A-JDBC-URL" value="VALUE-OF-PROPERTY"/>
<property name="NAME-OF-PROPERTY-TO-FORM-A-JDBC-URL" value="VALUE-OF-PROPERTY"/>
</properties>
</persistence-unit>
</persistence>
в классе ресурсов вы можете объявить:
@SuppressWarnings("unused")
@Produces
@PersistenceContext
private EntityManager em;
то, вы можете использовать его в GuestPreferences классе:
@Inject
private EntityManager em;
em.getTransaction().begin();
Query query = em.createQuery("SELECT u FROM user_table u where u.iduser=:iduser");
query.setParameter("iduser", "THEME-USER-ID");
User resultUser = (User) query.getResultList();
em.getTransaction().commit();
if(User!=null){
return resultUser.getTheme();
}
выше код предполагает у вас есть таблицу user_table, где у пользователя есть iduser, name ... и столбец темы, и предполагается, что у вас есть объект под названием User для управления пользователями.
Еще один способ сделать это: включать таблицы стилей для шаблона страницы:
<h:body> <h:outputStylesheet library="primefaces-#{themesBean.theme}" name="theme.css" /> </h:body>
Где #{themesBean.theme}
переменная reffers на имя вашей темы.
P.S.испытано в PF5
- 1. Как установить тему PrimeFaces?
- 2. PrimeFaces: как сделать тему динамической
- 3. Можно ли изменить тему PrimeFaces на лету?
- 4. Как сохранить тему стилей в блокноте ++
- 5. Как сохранить тему в SharedPreference Android
- 6. Как сохранить мою тему стиля в NP ++?
- 7. Как настроить тему Primefaces Aristo для Twitter-темы Bootstrap
- 8. Primefaces 3.5 Редактор сохранить содержимое
- 9. Primefaces Аякса Inplace сохранить данные
- 10. Сохранить тему с помощью sharedpreference
- 11. Primefaces и Liferay, задать тему по всему порталу
- 12. Я не вижу тему PrimeFaces с весенней безопасностью
- 13. JSF PrimeFaces: как сделать h: inputText выглядит как виджет PrimeFaces?
- 14. Как хранить/сохранить таймер/Тему запущенных экземпляров в WCF службе
- 15. Как начать тему, но сохранить ее в течение определенного времени?
- 16. Сохранить текущую тему окна для vsf-файла
- 17. Как получить правильную тему темы для selectOneMenu?
- 18. Primefaces ultima, как начать с
- 19. сохранить тему андроида, используя общие настройки
- 20. Atom (редактор): изменить существующую тему и сохранить как новый
- 21. сохранить файл изображения в определенном каталоге JSF primefaces проекта
- 22. Как отобразить элемент DataList в диалоге Primefaces
- 23. Как обновить строку в Primefaces?
- 24. Как создавать отчеты в PrimeFaces?
- 25. Как обновить layoutUnit в PrimeFaces
- 26. Как использовать новую тему в Wordpress?
- 27. Kafka consumer - как добавить тему
- 28. Конвертировать тему Magento в тему Wordpress?
- 29. Как использовать PrimeFaces getSelectedRowsCount?
- 30. Как скачать витрину PrimeFaces?