我正在阅读一篇标题为“ JSF 2 GETs Bookmarkable URLs ”的文章。
文章中有这样一段话:
视图参数简介
API 文档描述了视图参数,由 javax.faces.component.UIViewParameter 组件类表示,作为请求参数和模型属性之间的声明性绑定。与模型属性的绑定使用 EL 值表达式(例如,#{blog.entryId})来表达。如果省略表达式,则请求参数将绑定到具有相同名称的请求范围变量。
有人可以提供请求范围变量的示例吗?
“请求范围变量”是作为HttpServletRequest.
request.setAttribute("foo", foo);
Run Code Online (Sandbox Code Playgroud)
该属性在 EL 中可以通过#{foo}. 它HttpServletRequest本身的生命周期正好是一个 HTTP 请求-响应周期。一旦与 HTTP 请求关联的 HTTP 响应完全到达客户端(Web 浏览器),该HttpServletRequest实例(包括其所有属性)就会被丢弃。顺便说一句,JSF 请求范围内的托管 bean 也存储为HttpServletRequest.
由于 JSF 在基本 HTTP Servlet API“之上”运行,如果您还了解 HTTP 和 Servlet API 的工作原理,那么这一切都会更容易理解。这个答案可能会给人一些启示:servlet 是如何工作的?实例化、会话、共享变量和多线程。
您接下来的问题可能是“那么这与引用的段落有何关系?” 嗯,它基本上告诉我们,当您省略value的属性时<f:viewParam>,它会被作为变量放在请求范围中。
所以,如果你使用
request.setAttribute("foo", foo);
Run Code Online (Sandbox Code Playgroud)
代替
<f:viewParam name="entryId" />
Run Code Online (Sandbox Code Playgroud)
#{entryId}然后它在请求范围内变得可用。
<f:viewParam name="entryId" value="#{blog.entryId}" />
Run Code Online (Sandbox Code Playgroud)
然而,这不是通常使用视图参数的方式。或者,您也可以只使用#{param}地图,从而使整个过程<f:viewParam>变得多余。
<p>The entry ID view parameter is: #{entryId}</p>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3344 次 |
| 最近记录: |