Search code examples
jsfurljsf-2

How to get the URL of current page in JSF?


Is there any way to get the URL of the page which is loaded?

I would like the URL of the page which is loaded, in my controller i will call a method getUrlOfPage() in init() method .

I need the URL source to use it as a input for exporting the context in it.

How to get the URL of the page?


Solution

  • It's available by HttpServletRequest#getRequestURL() (with domain) or getRequestURI() (without domain). The HttpServletRequest itself is in turn available through JSF API via ExternalContext#getRequest().

    Thus, so:

    public void someMethod() {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String url = request.getRequestURL().toString();
        String uri = request.getRequestURI();
        // ...
    }
    

    Or, if you're using CDI @Named to manage beans, and you're on JSF 2.3 or newer, then this is also possible through javax.faces.annotation.ManagedProperty:

    @Inject @ManagedProperty("#{request.requestURL}")
    private StringBuffer url; // +setter
    
    @Inject @ManagedProperty("#{request.requestURI}")
    private String uri; // +setter
    
    public void someMethod() {
        // ...
    }
    

    Or, if you're using CDI @Named to manage beans, then this is also possible, also on older JSF versions:

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

    Or, if you're still using the since JSF 2.3 deprecated @ManagedBean, then this is also possible through javax.faces.bean.ManagedProperty (note that the bean can only be @RequestScoped!):

    @ManagedProperty("#{request.requestURL}")
    private StringBuffer url; // +setter
    
    @ManagedProperty("#{request.requestURI}")
    private String uri; // +setter
    
    public void someMethod() {
        // ...
    }
    

    See also