Preciso muito de uma ajuda, tenho um problema: obter a informação, na classe bean (como exemplo managerBean), do local da página que faz requisições a essa classe bean.
Como exemplo, imagine o cenário: Tenho um Contexto de aplicação que se chama “Teste”, dentro desse contexto existem as pastas básicas, META-INF, WEB-INF e um index.html, além de mais uma pasta chamada publico, sendo que dentro tem uma página chamada principal.xhtml.
//O código de principal.xhtml:
...
<h:body>
<h:form>
<h:commandLink action="#{managerBean.imprime}">Imprime</h:commandLink>
</h:form>
</h:body>
...
//O código da classe managerBean:
@ManagedBean(name="managerBean")
@RequestScoped
public class ManagerBean {
public void imprime() {
System.out.println(FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath());
}
}
Meu problema aqui é que a informação que está sendo impressa na saída padrão é /Teste, e eu esperava, baseado no meus estudos, que getRequestContextPath() me retornasse /Teste/publico, pois a requisição de request partiu de uma página de dentro de /Teste/publico.
Para resolver esse problema criei, o que acho, um “enjambragato”, porém acredito que isso não vá funcionar sempre:
//O código de principal.xhtml:
...
<h:body>
<h:inputHidden id="publico" value="publico"/>
<h:form>
<h:commandLink action="#{managerBean.imprime}">Imprime</h:commandLink>
</h:form>
</h:body>
...
//O código da classe managerBean:
@ManagedBean(name="managerBean")
@RequestScoped
public class ManagerBean {
public void imprime() {
FacesContext aFacesContext = FacesContext.getCurrentInstance();
Map<String, String> map = aFacesContext.getExternalContext().getRequestParameterMap();
Set<String> chaves = map.keySet();
Iterator<String> i = chaves.iterator();
System.out.println(map.get(i.next()+":publico"));
}
}