Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
URL jsf2中的参数_Jsf_Jsf 2 - Fatal编程技术网

URL jsf2中的参数

URL jsf2中的参数,jsf,jsf-2,Jsf,Jsf 2,我需要有这个链接: 要从如下代码中提取id: HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); String clipId = request.getParameter("id"); 当我在tomcat上运行它时,我得到: 信息 /OnAir/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的情况下运行它时,它运行正常


如何使其运行?

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


在请求过程中,您可能会在某处丢失id。

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

所以,这个链接应该有效


也就是说,有一种更好的方法来访问请求参数。将其设置为值为
{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罩下拖出“原始”ServletAPI时,总是问自己(或者在这里是这样):“难道没有JSF-ish方法吗?”。很有可能你不必要地过度复杂化了;)

不客气。不,你只需要从某个地方开始。10年前我也犯了同样的错误。从错误中吸取教训。当你再次遇到同样的问题症状时,记住它们。所学到的教训对未来很有价值。事实上,这对我来说是行不通的。我的bean作用域是view,我得到了一个令人讨厌的异常:表达式#{param.id}request引用的对象的作用域比view的引用托管bean(clipBean)作用域短。如果你想处理每个请求的请求参数,你的bean在逻辑上应该是请求作用域。并非每个请求都构造视图范围的bean。也许您会坚持您的“hack”,或者创建一个单独的请求范围bean,并将视图范围bean注入新的请求范围bean中。