Hello,
I use restfaces an I have UrLs such as mydomain.com/fr/book/etc
where /fr/ is the desired locale. I have tried retrieving the locale string
from the URL and setting the locale from a PhaseListener before the
renderResponse phase but it does not work i.e. when I change the locale in
the address bar to /en/book/etc it will not change the locale. Any clue?
Thanks in advance,
JUlien.
Here is the phase listener:
code:
------------------------------
public class DebugPhaseListener implements PhaseListener {
private static transient Logger log =
Logger.getLogger("com.jeanbaptistemartin.util");
public DebugPhaseListener() {
log.debug("DebugPhaseListener constructor");
}
public void afterPhase(PhaseEvent phaseEvent) {
log.debug("after---> " + phaseEvent.getPhaseId());
}
public void beforePhase(PhaseEvent phaseEvent) {
Locale locale =
extractLocale(FacesContext.getCurrentInstance().getExternalContext().getRequestServletPath());
FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
private Locale extractLocale(String servletPath) {
String[] array = servletPath.split("/");
return new Locale(array[0]);
}
}
------------------------------
Here is the managed bean (I actually use spring):
code:
------------------------------
@Component("sculptureView")
@Scope("request")
public class SculptureView {
private Logger log = Logger.getLogger("com.jeanbaptistemartin.view");
private JbmService service;
private Sculpture sculpture;
public SculptureView() {
log.info("Sculpture()");
}
@Autowired
public SculptureView(JbmService service) {
log.info("Sculpture(JbmService service)");
this.service = service;
}
@Instance("#{sculptureView}")
@HttpAction(value = "sculptureAction", pattern = "{locale}/sculpture/{id}")
public String getBookById(@Param("id") int id, @Param("locale")String locale) {
this.sculpture = service.findByID(id);
log.debug("Locale: "+ locale);
return "/sculpture.jsp";
}
public Sculpture getSculpture() {
return sculpture;
}
public void setSculpture(Sculpture sculpture) {
this.sculpture = sculpture;
}
}
------------------------------
The problem I get is that the jsp page still display today's date in
french...
Julien.