URL jsf2中的参数
我需要有这个链接: 要从如下代码中提取id: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 描述请求的资
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中。