仅在页面加载时处理 f:viewParam

2024-02-15

我正在使用一个<f:viewParam>传递参数如下。

<ui:define name="metaData">
    <f:metadata>
        <f:viewParam name="id" value="#{bean.entity}" converter="#{converter}"/>
    </f:metadata>
</ui:define>

是否可以处理这个<f:viewParam>,仅在页面加载/刷新时?

这只是因为指定的转换器<f:viewParam>将通过查询字符串传递的值转换为 JPA 实体的成本很高。因此,它涉及昂贵的数据库事务,即使在执行时也是如此ajaxical使用类似组件的回发<p:commandButton>, <p:commandLink>这是不必要的。

因此,例如,当<p:commandLink> (ajaxical单击 ) 后,不应执行昂贵的业务服务(在转换器中)。这可以做到吗?


这在某种程度上有效(尽管如此,很奇怪),当rendered属性是根据facesContext.postback like rendered="#{not facesContext.postback}"但属性rendered is 没有记录 http://docs.oracle.com/javaee/7/javaserverfaces/2.2/vdldocs/facelets/f/viewParam.html。因此,它是不可靠的。


您可以通过创建扩展的自定义标签来实现这一点<f:viewParam>其中,您将提交的值存储为实例变量,该变量不存储在 JSF 视图状态中,而是存储在 JSF 视图状态中<f:viewParam>默认情况下是这样。请求结束时,所有 UI 组件实例都将被销毁。它们在请求开始时重新创建。当提交的值为null,那么它就不会调用转换器或模型设置器。这一切都在Arjan Tijms 的博客 http://arjan-tijms.omnifaces.org/2011/07/stateless-vs-stateful-jsf-view.html.

OmniFaces http://omnifaces.org自 1.0 版本以来已经提供了一个现成的解决方案<o:viewParam> http://showcase.omnifaces.org/components/viewParam, 也可以看看我自己的博客 http://balusc.blogspot.com/2012/03/stateless-view-parameter.html关于这一点。根据您的问题历史记录,您已经在使用 OmniFaces,因此您基本上需要做的就是替换f: by o:.

<ui:define name="metaData">
    <f:metadata>
        <o:viewParam name="id" value="#{bean.entity}" converter="#{converter}"/>
    </f:metadata>
</ui:define>

在同一视图上的回发期间,这不会调用模型设置器(也不会调用转换器)。


当渲染的属性根据 facesContext.postback 进行评估(如 render="#{not facesContext.postback}" )但渲染的属性未记录时,这在某种程度上有效(尽管如此,很奇怪)。因此,它是不可靠的。

那是因为<f:viewParam> http://docs.oracle.com/javaee/7/api/javax/faces/component/UIViewParameter.html本质上是一个UIInput http://docs.oracle.com/javaee/7/api/javax/faces/component/UIInput.html组件(否则它将无法执行转换、验证、模型更新以及所有像通常的输入组件一样的东西),因此它只是一个UIComponent http://docs.oracle.com/javaee/7/api/javax/faces/component/UIComponent.html支持一个rendered http://docs.oracle.com/javaee/7/api/javax/faces/component/UIComponent.html#isRendered%28%29属性。然而,这并没有明确记录,因为它实际上不会向 HTML 输出呈现任何内容(这也是为什么它是一个f:xxx, not a h:xxx)。但是使用此属性,您实际上可以控制回发期间的行为,因为此属性是also http://grepcode.com/file/repo1.maven.org/maven2/javax.faces/javax.faces-api/2.2/javax/faces/component/UIInput.java#UIInput.processDecodes%28javax.faces.context.FacesContext%29评估于processDecodes() http://docs.oracle.com/javaee/7/api/javax/faces/component/UIComponent.html#processDecodes%28javax.faces.context.FacesContext%29在应用请求值阶段调用的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在页面加载时处理 f:viewParam 的相关文章

随机推荐

  • Html IFrame 标签未在电子邮件正文中解释

    我需要在电子邮件正文中发送一个 html 文件 其中包含 iframe 该 html 文件在浏览器中工作正常并播放视频 但是当我在电子邮件正文中发送它时 iframe 标记不会被解释 因此不会表现在身体上 这是 html 文件 b Aman
  • 分配给位置参数[重复]

    这个问题在这里已经有答案了 如何在 Bash 中为位置参数赋值 我想为默认参数分配一个值 if z 4 then 4 3 fi 表明4不是命令 The set内置是设置位置参数的唯一方法 set this is a test echo 1
  • Scylladb:聚类键笛卡尔乘积大小 600 大于最大值 100

    我正在使用 data stax java 驱动程序来查询 scylladb 我在从 scylla 读取数据时看到此错误 RequestHandler ip 9042 回复服务器错误 集群键笛卡尔乘积大小 600 大于最大值 100 连接失效
  • Node.js - 服务器关闭了连接?

    我正在 Node js 服务器上运行一个 Web 应用程序 并且需要它始终在线 因此我将永远使用它 但这是我在一段时间后得到的结果 Error Connection lost The server closed the connection
  • 如何改变ios中源图像的脸部肤色?

    我的代码 如何管理不同肤色的RGB值 以及如何应用 这段代码将改变脸部和头发的颜色 但我想要 1 仅脸部着色 不包括头发 void changeSkinColorValue float value WithImage UIImage nee
  • Angular:将参数传递给另一个组件

    我被 Angular2 困住了 我想从 a 传递参数产品页面 例如 产品 ID 到支付页面 这是我迄今为止尝试过的 付款 html Message message
  • 覆盖对象时的 Perl 内存管理

    我的问题是关于 Perl 如何在内部管理对象的数据 当在 Perl 中创建对象时 新的子例程通常会返回对受祝福的对象的引用 以下面的代码为例 Create a new object my object Object gt new data1
  • 如何找到当前系统时区?

    在 Linux 上 我需要找到当前配置的时区作为 Olson 位置 我希望我的 C 或 C 代码能够移植到尽可能多的 Linux 系统 例如 我住在伦敦 所以我当前的奥尔森位置是 欧洲 伦敦 我是not对 BST EST 等时区 ID 感兴
  • SQL代码转换为C#数据类型问题

    我试图回答这个问题所以问题 https stackoverflow com questions 58726514 sp execution time is extremely slow 给出以下 SQL 代码 DECLARE input1
  • 如何将文本转换为 SVG 路径?

    我在 ttf 文件中有一个字体 想要生成 SVG 并将文本转换为路径 我不需要图像 因此使用 imagettftext 或 Image Magick 字体渲染功能是不够的 我需要可以放大和缩小的形状 我想丢失有关所用字体的信息 并且不想在中
  • Java 8 Stream:如何将当前元素与下一个元素进行比较?

    如何从a中获取下一个元素List使用 Java 8 流 如果我迭代List 我想将当前元素与列表的下一个元素进行比较 使用 Java 8 Stream 可行吗 My free StreamEx https github com amaemb
  • Spark中的分布式缓存相当于什么? [复制]

    这个问题在这里已经有答案了 在Hadoop中 您可以使用分布式缓存来复制每个节点上的只读文件 Spark 中的等效方法是什么 我了解广播变量 但这仅适用于变量 而不适用于文件 看一下 SparkContext addFile 在每个节点上添
  • 为什么子进程收到信号后不继续运行?

    以下是我的代码 父进程分叉一个子进程 子进程暂停 直到父进程向它发送信号 然后它继续运行 我的问题是为什么子进程不继续 追随父母向他发送信号 我错过或误解了什么吗 include
  • 为 iPhone 应用程序创建的本地数据库保存在哪里?

    我开发了一个加载完全静态内容的应用程序 我存储的数据大小超过 4 MB 如果没有此内容 应用程序将无法运行 在我的情况下 我应该在哪里保存本地数据库 文档文件夹或库文件夹 我的应用程序因 iCloud 存储备份而被拒绝 1 我应该在哪里保存
  • NoMethodError:Rails 中 nil:NilClass 未定义方法“类型”

    尝试加载使用 Rails 构建的网站上的某一页面时出现 NoMethodError 请参阅下面的完整堆栈跟踪 如果我改变false to true生产中 rb 在线 config cache classes false 然后问题就消失了 但
  • 凯尔·辛普森 (Kyle Simpson) 的 OLOO 模式与原型设计模式

    Kyle Simpson 的 OLOO 对象链接到其他对象 模式 与原型设计模式有什么不同吗 除了用专门表示 链接 原型的行为 的东西来创造它并澄清这里没有发生 复制 类的行为 之外 他的模式到底引入了什么 Here s 凯尔模式的示例 h
  • 为什么更改我的框的innerHTML 会使我的按钮在Greasemonkey 中停止工作?

    因此 我编写了一个脚本 在新选项卡中一次加载一个图像 感谢 Brock 让停止按钮可以工作HERE https stackoverflow com a 26418958 996364 然后我打破了它 添加了我在等待该问题的答案时写入的计数器
  • RESTful 身份验证作为一种状态形式

    Its 不可能的无需状态即可进行身份验证 那么 在设计带有身份验证的 RESTful 软件时 我们是否会为了安全性而牺牲这种架构呢 这能走多远 你可以存储任意数量的状态 只要它是为了构建更安全的系统吗 表示状态转移或 REST http e
  • Select2 - 如何插入粗体标题?

    我查看了 select2 的所有文档 但找不到如何插入这些粗体标题 有人可以提供一个完整的代码示例 需要 CSS 吗 来说明如何实现这一点 您可以通过使用来实现这一点optgroup tag
  • 仅在页面加载时处理 f:viewParam

    我正在使用一个