如何在JSF中获取当前页面的URL?

19

有没有办法获取已加载页面的URL?

我想在我的控制器中调用getUrlOfPage()方法获取已加载页面的URL。此方法将在init()方法中调用。

我需要使用URL源作为输入来导出其中的内容。

如何获取页面的URL?

1个回答

37

可以通过HttpServletRequest#getRequestURL()(包含域名)或getRequestURI()(不包含域名)获取。通过JSF API,ExternalContext#getRequest()也可以获得HttpServletRequest本身。

因此:

public void someMethod() {
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    String url = request.getRequestURL().toString();
    String uri = request.getRequestURI();
    // ...
}
或者,如果您正在使用CDI @Named来管理bean,并且您正在使用JSF 2.3或更新版本,则也可以通过javax.faces.annotation.ManagedProperty实现此操作:
@Inject @ManagedProperty("#{request.requestURL}")
private StringBuffer url; // +setter

@Inject @ManagedProperty("#{request.requestURI}")
private String uri; // +setter

public void someMethod() {
    // ...
}

如果你使用CDI @Named 来管理bean,那么在旧版本的JSF上也是可能的:

@Inject
private HttpServletRequest request;

public void someMethod() {
    String url = request.getRequestURL().toString();
    String uri = request.getRequestURI();
    // ...
}

或者,如果你仍在使用自JSF 2.3起已被弃用的@ManagedBean,那么这也可以通过javax.faces.bean.ManagedProperty实现(请注意,这个bean只能是@RequestScoped!):

@ManagedProperty("#{request.requestURL}")
private StringBuffer url; // +setter

@ManagedProperty("#{request.requestURI}")
private String uri; // +setter

public void someMethod() {
    // ...
}

参见


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接