代码之家  ›  专栏  ›  技术社区  ›  Dejell

url jsf2中的参数

  •  9
  • Dejell  · 技术社区  · 14 年前

    我需要这个链接:

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

    要从这样的代码中提取ID,请执行以下操作:

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

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

    消息 /OnAir/InnerPage/Clip.jsf&id=9099

    说明请求的资源 (/onair/innerpage/clip.jsf&id=9099) 不可用。

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

    我怎样才能让它跑起来?

    2 回复  |  直到 14 年前
        1
  •  24
  •   BalusC    14 年前

    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.
        }
    
        // ...
    }
    

    EL {{PARAM.ID} 返回的值 request.getParameter("id") .

    小贴士:每当您需要从一个托管bean中的JSF引擎罩下拖拽“原始”servlet API时,一定要问自己(或者在这里这么问):“难道没有JSF-ish方法吗?”.很有可能你不必要地过于复杂化了事情;)

        2
  •  3
  •   Mateusz Dymczyk    14 年前

    首先,您必须向我们展示如何在JSF中发送参数,它是一个commandbutton/link吗?输出链接?A?您是否也在使用redirect=true?

    很可能您在请求期间丢失了某个地方的ID。