从JSF中的当前HTTP请求获取到上下文路径的URL
假设以下URL(带或不带任何查询字符串和/或额外路径信息)从JSF中的当前HTTP请求获取到上下文路径的URL,jsf,jsf-2.2,Jsf,Jsf 2.2,假设以下URL(带或不带任何查询字符串和/或额外路径信息) https://localhost:8181/ContextPath/xxx/page.xhtml 我需要从中提取以下部分 https://localhost:8181/ContextPath i、 e.直到上下文路径 这可以通过定义我们感兴趣的实用方法的一种方式来完成,下面是一段代码 public static String getBaseURL(HttpServletRequest request) { String ur
https://localhost:8181/ContextPath/xxx/page.xhtml
我需要从中提取以下部分
https://localhost:8181/ContextPath
i、 e.直到上下文路径
这可以通过定义我们感兴趣的实用方法的一种方式来完成,下面是一段代码
public static String getBaseURL(HttpServletRequest request) {
String url = request.getRequestURL().toString();
return new String(url.substring(0, url.length() - request.getRequestURI().length())) + request.getContextPath();
}
它可以从托管bean调用,如下所示
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String link=Utility.getBaseURL(request);
但这反过来又需要公开我不感兴趣的底层javax.servlet.
API
是否有一种可靠的JSF方式可以从当前HTTP请求中获取URL的上述部分,而无需显式公开底层ServletAPI
我对单独收集scheme、服务器名称、端口、上下文路径等部分不感兴趣。使用与
HttpServletRequest
实例相关联的各自独立方法,只需传递FacesContext.getCurrentInstance().getExternalContext()
到您的实用程序和javax.servlet.
API未公开 FacesContext
(或ExternalContext
)不应在JSF上下文之外传递-在getBaseURL()
方法所在的普通实用程序Java类中(utility
)。实际上,我对传递HttpServletRequest
本身的实例也不感兴趣,但这就是我刚才作为示例介绍的内容。谢谢。那就创建一个JSF实用程序来包装它吧?我对此一无所知。否则,我就不会问这个问题本身:)。我假设像request.getRequestURL()
和request.getRequestURI()
这样的方法可能是由ExternalContext
或其他东西提供/包装的。也许我会对simple做出反应,但即使OmniFaces也没有解决这个问题的方法,我自己也不认为使用ServletAPI是一个问题。如果没有HttpServletRequest
实例,就无法获得它。不幸的是,你到底需要这个做什么?不存在@Tiny。(在JSF中)没有一个单一的、神奇的方法可以返回所有这些。很多信息都是在进入容器的过程中生成的。祝你好运