如何在支持JSF页面的bean中获取请求URL?我一直在看FacesContext文档,我能找到的最好的方法似乎太长了:
public String getRequestURL()
{
Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
if(request instanceof HttpServletRequest)
{
return ((HttpServletRequest) request).getRequestURL().toString();
}else
{
return "";
}
}
编辑:功能要求这里的要求是我们需要一个第三方javascript实用程序的完整。该实用程序的使用或体系结构不适合JSF,但除了此调用之外的所有内容都适合。我发现的方法是可行的,但是深入研究FacesContext是错误的。另外,我希望有一种方法可以被JSF表达式语言调用,因为它将以与“视图”相关的方式使用。
发布于 2010-07-22 05:21:53
如果您曾经需要通过FacesContext
从JSF底层获取原始Servlet API,那么很可能您在错误的地方完成了这项工作。这是什么,您认为这是正确的解决方案的功能需求?您是否应该使用真正的Servlet
类或Filter
,而不是JSF托管bean?或者,您可能根本不需要请求URL,因为有更好的"jsfish“方法可以实现同样的目的?
如果您更新您的问题以包括有关功能需求的详细信息,那么我们可能能够提出正确的解决方案。
根据您的编辑更新:那么,您只需要在视图端使用它吗?例如,#{bean.requestURL}
?您也可以直接从EL中已经隐式提供的HttpServletRequest
对象中获取它。
当您使用JSP时:
${pageContext.request.requestURL}
或者当你使用Facelets时:
#{request.requestURL}
现在,你如何在JavaScript中使用它呢?是否打印为JavaScript变量?像这样吗?
var url = '#{request.requestURL}';
如果是这样的话,你也可以抓取window.location
来实现。
var url = window.location;
不需要在JSF bean中添加特定于视图的详细信息。
发布于 2010-07-22 03:30:06
您已经有了答案:)恐怕您必须以这种方式使用它,因为每个HTTP请求都必须从faces上下文中检索。当然,您可以简化此方法的某些部分,如faces上下文检索,但这绝对是可行的方法,除非您使用某种框架将这些细节抽象出来,并让您直接访问HttpRequest对象。
致以问候。
发布于 2021-10-12 22:44:21
您可以获取所有参数的url,如下所示:
HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
.getRequest();
String url = req.getHeader("referer");
https://stackoverflow.com/questions/3302933
复制相似问题