2013-03-01 2 views

ответ

0

Я думаю, что установка выбрана тема сессии поможет:

session.setAttribute 
3

Вам не понадобится ThemeSwitcher, чтобы добиться такого упорства, которое вы ищете.

Просто выполните поиск базы данных для темы в ServletContextListener, а затем сохранить значение в контексте сервлета, возможно перекрывая все, что вы установили в web.xml

public Class MyContextListener implements ServletContextListener{ 

    public void contextInitialized(ServletContextEvent sce){ 

     String selectedTheme = myThemeDAO.getConfiguredTheme(); 

     sce.getServletContext().setInitParameter("primefaces.THEME",selectedTheme); 

    } 


    } 
1

связать компонент 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 для управления пользователями.

1

Еще один способ сделать это: включать таблицы стилей для шаблона страницы:

<h:body> <h:outputStylesheet library="primefaces-#{themesBean.theme}" name="theme.css" /> </h:body>

Где #{themesBean.theme} переменная reffers на имя вашей темы.

P.S.испытано в PF5

Смежные вопросы