Gostaria de saber se alguém saberia me dizer como resolver o problema da não persistência da sessão com Tomcat
e Weld
.
Plataforma:
- Tomcat 8.0.28
- JSF 2.2
- Weld 2.4.2-Final
- Primefaces 6.0
Gostaria de saber se alguém saberia me dizer como resolver o problema da não persistência da sessão com Tomcat
e Weld
.
Plataforma:
Sua pergunta está totalmente confusa amigo, posta o código do seu Bean pra gente dar uma olhada e tentar entender do que você está falando. Mas um chute é que talvez você tenha misturado anotações do CDI com outras.
LanguageBean.java
@Named
@SessionScoped
public class LanguageBean implements Serializable {
private static final long serialVersionUID = 2811417677037057432L;
private String value;
private Locale locale;
@Inject
private FacesContext context;
@PostConstruct
public void init() {
this.locale = this.context.getViewRoot().getLocale();
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Locale getLocale() {
return locale;
}
public void setLocale(Locale locale) {
this.locale = locale;
}
public String getLanguage() {
return this.locale.getLanguage();
}
public List<String> getLanguages() {
return findFileLanguages();
}
public void getChangeLanguage(ValueChangeEvent event) {
System.out.println(event.getNewValue().toString());
changeLanguageByString(event.getNewValue().toString());
}
private void changeLanguageByString(String language) {
this.locale = new Locale(language);
this.context.getViewRoot().setLocale(new Locale(language));
this.context.getApplication().setDefaultLocale(new Locale(language));
}
}
O Locale não é mantido ao navegar pelas paginas.
Use o @SessionScope do JSF
@belofeso
põe o import desse “SessionScoped” que vc está usando… O do CDI é:
import javax.enterprise.context.SessionScoped;
@Satangozo estou usando a javax.enterprise.context.SesssionScoped, testei agora com javax.faces.bean.SessionScoped, está correndo o mesmo problema
Eu arrumei a classe e percebi que só a tradução dos enum’s são mantidas, não se porque a sessão não mantém o local par as demais.
import java.io.Serializable;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.serviceclub.util.jsf.qualifier.Bundle;
@Named
@SessionScoped
public class LanguageBean implements Serializable {
private static final long serialVersionUID = 2811417677037057432L;
private String value;
private Locale locale;
@Inject
private FacesContext context;
@Inject
@Bundle
private transient ResourceBundle bundle;
@Inject
@Bundle
private String baseName;
@PostConstruct
public void init() {
// this.locale = this.context.getViewRoot().getLocale();
this.locale = this.bundle.getLocale();
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Locale getLocale() {
return locale;
}
public void setLocale(Locale locale) {
this.locale = locale;
}
public String getLanguage() {
return this.locale.getLanguage();
}
public List<String> getLanguages() {
return findFileLanguages();
}
public void getChangeLanguage(ValueChangeEvent event) {
changeLanguageByString(event.getNewValue().toString());
}
public String enumXlate(Enum<?> enumType) {
this.bundle = ResourceBundle.getBundle(this.baseName, this.locale);
return this.bundle.getObject("enum_" + enumType.toString().toLowerCase()).toString();
}
public String localeXlate(String locale) {
this.bundle = ResourceBundle.getBundle(this.baseName, this.locale);
return this.bundle.getObject("loc_" + new Locale(locale).getLanguage()).toString();
}
private void changeLanguageByString(String language) {
this.locale = new Locale(language);
this.bundle = ResourceBundle.getBundle(this.baseName, this.locale);
this.context.getViewRoot().setLocale(this.locale);
this.context.getApplication().setDefaultLocale(this.locale);
}
}