Problema com ajax ao usar o componente p:themeSwitcher!

4 respostas
Diego_Adriano

Bom galera, estou tentando usar o componente p:themeSwitcher para mudar o thema da aplicação, ele muda normalmente porem qdo navego para outra pagina ele volta ao componente original e só depois ele volta ao que escolhi.
Bem … no showcase tem um metodo que se chama SAVETHEME justamente para evitar isso, porém esse componente é acionado via AJAX mas tenho o seguinte erro quando tento utilizar o AJAX

h:outputText value="Escolha o Thema: " />   
        <p:themeSwitcher style="width:150px" initialText="Escolha">  
            
            <f:selectItem itemLabel="Escolha o Theme" itemValue="" />  
            <f:selectItems value="#{themeSwitcherBean.themes}" var="theme"/>
            <p:ajax listener="#{guestPreferences.saveTheme}"/>  
       	
       	</p:themeSwitcher>

Erro:

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.view.facelets.TagException: /Pages/Themes/themeMenu.xhtml @14,63 <p:ajax> Parent not an instance of ClientBehaviorHolder: org.primefaces.component.themeswitcher.ThemeSwitcher@6b33d875

Se alguem ai puder ajudar … Abraços

4 Respostas

tjca1

Conseguiu resolver ?
Estou na mesma situação.

Diego_Adriano

Sim … vou procurar aqui e posto …

Diego_Adriano
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
				xmlns:ui="http://java.sun.com/jsf/facelets"
				xmlns:h="http://java.sun.com/jsf/html"
				xmlns:f="http://java.sun.com/jsf/core"
				xmlns:p="http://primefaces.prime.com.tr/ui">

	
	<p:commandButton id="themeButton" value="#{guestPreferences.theme}" type="button" />
	
	<p:menu widgetVar="themeMenu" position="dynamic" trigger="themeButton" my="left top" at="left bottom"
			styleClass="themeMenu">
			
			<p:submenu  label="Temas">
				
				<p:menuitem value="Aristo" ajax="false">
					<f:setPropertyActionListener value="aristo" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Black-Tie" ajax="false">
					<f:setPropertyActionListener value="black-tie" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Blitzer" ajax="false">
					<f:setPropertyActionListener value="blitzer" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Bluesky" ajax="false">
					<f:setPropertyActionListener value="bluesky" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Casablanca" ajax="false">
					<f:setPropertyActionListener value="casablanca" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Cupertino" ajax="false">
					<f:setPropertyActionListener value="cupertino" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Dark-Hive" ajax="false">
					<f:setPropertyActionListener value="dark-hive" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Dot-Luv" ajax="false">
					<f:setPropertyActionListener value="dot-luv" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Eggplant" ajax="false">
					<f:setPropertyActionListener value="eggplant" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Excite-Bike" ajax="false">
					<f:setPropertyActionListener value="excite-bike" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Flick" ajax="false">
					<f:setPropertyActionListener value="flick" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Glass-X" ajax="false">
					<f:setPropertyActionListener value="Glass-x" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Hot-Speaks" ajax="false">
					<f:setPropertyActionListener value="hot-speaks" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Humanity" ajax="false">
					<f:setPropertyActionListener value="humanity" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Le-Frog" ajax="false">
					<f:setPropertyActionListener value="le-frog" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Midnight" ajax="false">
					<f:setPropertyActionListener value="midnight" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Mint-Choc" ajax="false">
					<f:setPropertyActionListener value="mint-choc" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Overcast" ajax="false">
					<f:setPropertyActionListener value="overcast" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Pepper-Grinder" ajax="false">
					<f:setPropertyActionListener value="pepper-grinder" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Redmond" ajax="false">
					<f:setPropertyActionListener value="redmond" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Rocket" ajax="false">
					<f:setPropertyActionListener value="rocket" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Smoothness" ajax="false">
					<f:setPropertyActionListener value="smoothness" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Sout-Stret" ajax="false">
					<f:setPropertyActionListener value="sout-stret" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Start" ajax="false">
					<f:setPropertyActionListener value="start" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Sunny" ajax="false">
					<f:setPropertyActionListener value="sunny" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Swanky-Purse" ajax="false">
					<f:setPropertyActionListener value="swanky-purse" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Trontastic" ajax="false">
					<f:setPropertyActionListener value="trontastic" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="UI-Darkness" ajax="false">
					<f:setPropertyActionListener value="ui-darkness" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="UI-Lightness" ajax="false">
					<f:setPropertyActionListener value="ui-lightness" target="#{guestPreferences.theme}" />
				</p:menuitem>
				
				<p:menuitem value="Vader" ajax="false">
					<f:setPropertyActionListener value="vader" target="#{guestPreferences.theme}" />
				</p:menuitem>
			</p:submenu>
	</p:menu>	
	<!-- 
	
	 -->
</ui:composition>
web.xml
<context-param>
		<param-name>primefaces.THEME</param-name>
		<param-value>#{guestPreferences.theme}</param-value> 
  </context-param>
package Themas;

import java.io.Serializable;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@SessionScoped
public class GuestPreferences implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String theme = "redmond";

	public String getTheme() {
		
		System.out.println("getTheme:" +theme);
		//theme = new String();
		
		Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
		
		if( params.containsKey(theme) ){
			theme = params.get(theme);
		}/*
		try {
			ThemeSwitcherBean ts = new ThemeSwitcherBean();
			ts.saveTheme();
		} catch (NullPointerException e) {
			e.printStackTrace();
		}*/
		
		return theme;
	}

	public void setTheme(String theme) {
		System.out.println("setTheme:" +theme);
		
		this.theme = theme;
	}
	
	

}
package Themas;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

@ManagedBean
public class ThemeSwitcherBean {

	private Map<String, String> themes;
	private List<Theme> advacedThemes;
	private String theme;
	@ManagedProperty(value="#{guestPreferences}")
	private GuestPreferences gp;
	
	public List<Theme> getAdvacedThemes() {
		return advacedThemes;
	}
	
	public GuestPreferences getGp() {
		return gp;
	}
	
	public String getTheme() {
		return theme;
	}
	public Map<String, String> getThemes() {
		return themes;
	}
	@PostConstruct
	public void init(){
		System.out.println("Init Theme");
		
		theme = gp.getTheme();
		
		advacedThemes = new ArrayList<Theme>();
		advacedThemes.add(new Theme("aristo"));
		advacedThemes.add(new Theme("cupertino"));
		advacedThemes.add(new Theme("trontastic"));
		
		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("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-Speaks",  	 "ht-speaks");
		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("Smoothness", 	 "smoothness");
		themes.put("Sout-Stret",	 "sout-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(){
		System.out.println("saveTheme");
		gp.setTheme(theme);
	}
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	public void setAdvacedThemes(List<Theme> advacedThemes) {
		this.advacedThemes = advacedThemes;
	}
	public void setGp(GuestPreferences gp) {
		this.gp = gp;
	}
	public void setTheme(String theme) {
		this.theme = theme;
	}
	public void setThemes(Map<String, String> themes) {
		this.themes = themes;
	}
	
}
package Themas;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Theme implements Serializable{

	private String name;
	
	public Theme() {
	}

	public Theme(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

		@Override
	public String toString() {
		return name;
	}
}
xxjamisxx

valeu cara estava com mesma
duvida resolveu meu problema

Criado 11 de agosto de 2011
Ultima resposta 5 de mai. de 2012
Respostas 4
Participantes 3