Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

parameter in URL jsf2

Tags:

jsf

jsf-2

I need to have this link:

http://myserver:/myproject/innerpage/clip.jsf&id=9099

to extract the id from a code like this:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String clipId = request.getParameter("id");

When I run it on tomcat I get:

message /OnAir/innerpage/clip.jsf&id=9099

description The requested resource (/OnAir/innerpage/clip.jsf&id=9099) is not available.

When I run it without &id=9099 it runs all right.

How can I make it run?

like image 957
Dejell Avatar asked Jul 28 '10 17:07

Dejell


People also ask

What are the parameters in URL?

What Are URL Parameters? Also known by the aliases of query strings or URL variables, parameters are the portion of a URL that follows a question mark. They are comprised of a key and a value pair, separated by an equal sign. Multiple parameters can be added to a single page by using an ampersand.

How do I add parameters to a URL in HTML?

URL parameters (also known as “query strings”) are a way to structure additional information for a given URL. Parameters are added to the end of a URL after a '? ' symbol, and multiple parameters can be included when separated by the '&' symbol.

How many parameters does a URL have?

1000 parameters is the maximum by default. This default can be customized in the HTTP Protocol Validation Policy. An attacker would use exceptionally long parameter names or values for three different purposes: To launch an overflow attack against the data structure that stores the parameters as name-value pairs.


2 Answers

The separator character between path and query string in URL is ?, not &. The & is separator character for multiple parameters in query string, e.g. name1=value1&name2=value2&name3=value3. If you omit the ?, then the query string will be seen as part of path in URL, which will lead to a HTTP 404 page/resource not found error as you encountered.

So, this link should work http://myserver:port/myproject/innerpage/clip.jsf?id=9099


That said, there's a much better way to access the request parameter. Set it as a managed property with a value of #{param.id}.

public class Bean {

    @ManagedProperty(value="#{param.id}")
    private Long id;

    @PostConstruct
    public void init() {
        System.out.println(id); // 9099 as in your example.
    }

    // ...
}

The EL #{param.id} returns you the value of request.getParameter("id").

A tip: whenever you need to haul the "raw" Servlet API from under the JSF hoods inside a managed bean, always ask yourself (or here at SO): "Isn't there a JSF-ish way?". Big chance you're unnecessarily overcomplicating things ;)

like image 84
BalusC Avatar answered Sep 22 '22 18:09

BalusC


You first have to show us how you are sending the parameter in your JSF, is it a commandButton/Link? An outputLink? A ? Also are you using redirect=true?

Chances are you are losing the id somewhere during the request.

like image 28
Mateusz Dymczyk Avatar answered Sep 19 '22 18:09

Mateusz Dymczyk