有没有办法获取已加载页面的URL?
我想在我的控制器中调用getUrlOfPage()方法获取已加载页面的URL。此方法将在init()方法中调用。
我需要使用URL源作为输入来导出其中的内容。
如何获取页面的URL?
可以通过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() {
// ...
}