Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
827 views
in Technique[技术] by (71.8m points)

jsf - parameter in URL jsf2

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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 ;)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...