Puede evitar dependencias específica del contenedor mediante el uso de la ExternalContext
en algo como esto forma:
public String getApplicationUri() {
try {
FacesContext ctxt = FacesContext.getCurrentInstance();
ExternalContext ext = ctxt.getExternalContext();
URI uri = new URI(ext.getRequestScheme(),
null, ext.getRequestServerName(), ext.getRequestServerPort(),
ext.getRequestContextPath(), null, null);
return uri.toASCIIString();
} catch (URISyntaxException e) {
throw new FacesException(e);
}
}
Sin embargo, tenga en cuenta que este código no puede ser totalmente contenedor agnóstica - algunos de esos métodos lanzan una UnsupportedOperationException
en su implementación predeterminada. Este código se basa en los métodos JSF 2.0.
También debe tener en cuenta que el uso de un URI como este como base no es la forma correcta de referirse a un recurso en su aplicación en el caso general; el ViewHandler
y el ExternalContext
se deben usar en concierto para crear URL de recursos para hacer referencia a recursos de la aplicación para buscar recursos o URL de acción para invocar el ciclo de vida JSF, por ejemplo.
Desafortunadamente, no creo que exista una forma general, independiente del contenedor, de hacer todo lo que pueda desear en una aplicación JSF, por lo que a veces depende de la implementación y no tiene más remedio que arrojar a otras API.
Desde que estoy en el servidor local y no hay forma de probarlo ahora mismo con un nombre de dominio real. ¿Podría decirme cuál de esos métodos me daría el dominio? Quiero recuperar www.midominio.com – Ced