URL jsf2中的参数

Dej*_*ell 9 jsf jsf-2

我需要这个链接:

HTTP:// MYSERVER:/myproject/innerpage/clip.jsf&id=9099

从这样的代码中提取id:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String clipId = request.getParameter("id");
Run Code Online (Sandbox Code Playgroud)

当我在tomcat上运行它时,我得到:

消息/OnAir/innerpage/clip.jsf&id=9099

description请求的资源(/OnAir/innerpage/clip.jsf&id=9099)不可用.

当我在没有&id = 9099的情况下运行它时,它运行正常.

我该如何让它运行?

Bal*_*usC 24

URL中路径和查询字符串之间的分隔符?不是&.该&是在查询字符串,如多个参数分隔符name1=value1&name2=value2&name3=value3.如果省略?,则查询字符串将被视为URL中路径的一部分,这将导致遇到HTTP 404页面/资源未找到错误.

所以,这个链接应该工作http:// myserver:port/myproject/innerpage/clip.jsf?id = 9099


也就是说,有一种更好的方式来访问请求参数.将其设置为值为的托管属性#{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.
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

EL #{param.id}返回值request.getParameter("id").

提示:每当你需要从托管bean内部的JSF引擎下运送"原始"Servlet API时,总是问自己(或者在SO):"不存在JSF方式吗?".很有可能你不必要地过度复杂化了事情;)

  • 别客气.不,你只需要从某处开始.我在10年前犯了同样的错误.从错误中吸取教训.每当您再次遇到相同的问题症状时,请记住它们.吸取的教训对未来很有价值. (8认同)