有什么方法可以获取已加载页面的URL?
我想要加载的页面的URL,在我的控制器中,我将在init()方法中调用方法getUrlOfPage()。
我需要URL源来将其用作在其中导出上下文的输入。
如何获取页面的URL?
可用HttpServletRequest#getRequestURL()
(有域)或getRequestURI()
(无域)。该HttpServletRequest
本身又可以通过通过JSF API ExternalContext#getRequest()
。
因此,这样:
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() {
// ...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句