Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JSF中的当前HTTP请求获取到上下文路径的URL_Jsf_Jsf 2.2 - Fatal编程技术网

从JSF中的当前HTTP请求获取到上下文路径的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

假设以下URL(带或不带任何查询字符串和/或额外路径信息)

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中)没有一个单一的、神奇的方法可以返回所有这些。很多信息都是在进入容器的过程中生成的。祝你好运