- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以让我们选择一个 UIComponent,例如 HtmlSelectOneRadio
(请在此处查看源代码:http://grepcode.com/file/repo1.maven.org/maven2/com.sun.faces/jsf-api/2.1.7/javax/faces/component/html/HtmlSelectOneRadio.java#HtmlSelectOneRadio)
所以有些 setter 会调用方法 handleAttribute(...)
,而有些则不会,例如
public void setDir(java.lang.String dir) {
getStateHelper().put(PropertyKeys.dir, dir);
handleAttribute("dir", dir);
}
public void setDisabled(boolean disabled) {
getStateHelper().put(PropertyKeys.disabled, disabled);
}
我非常不清楚 handleAttribute
正在做什么,请 JSF 大师向我解释一下这个方法试图完成什么以及为什么一些属性调用这个方法而其他属性不调用这个方法?非常感谢
最佳答案
它与 Mojarra 内部渲染优化有关,其中仅由内部handleAttribute()
方法设置的属性被渲染为所谓的“pass” -thru”属性,而不是检查组件的每个属性是否已设置,如果属性相对较多,这最终可能会更昂贵。 “直通”属性是一种组件属性,无需任何特定的预处理/后处理即可直接呈现。
在 Mojarra 的 RenderKitUtils
中四处张望类,从 renderPassThruAttributes()
开始方法:
316 if (canBeOptimized(component, behaviors)) {
317 //noinspection unchecked
318 List<String> setAttributes = (List<String>)
319 component.getAttributes().get(ATTRIBUTES_THAT_ARE_SET_KEY);
320 if (setAttributes != null) {
321 renderPassThruAttributesOptimized(context,
322 writer,
323 component,
324 attributes,
325 setAttributes,
326 behaviors);
327 }
328 } else {
329
330 // this block should only be hit by custom components leveraging
331 // the RI's rendering code, or in cases where we have behaviors
332 // attached to multiple events. We make no assumptions and loop
333 // through
334 renderPassThruAttributesUnoptimized(context,
335 writer,
336 component,
337 attributes,
338 behaviors);
339 }
如果 component
是标准的 JSF 组件之一(实际上,如果组件的包名称以javax.faces.component.
),如果 behaviors
数组中的行为不超过 1 个。
renderPassThruAttributesOptimized()
将仅呈现在 setAttributes
参数中指定的属性。
renderPassThruAttributesUnoptimized()
将遍历 attributes
映射中的每个属性,如果关联值不为 null/empty,则检查每个属性,然后呈现它.
至于为什么有些属性没有被handleAttribute()
设置,那是因为它们需要一些更具体的前/后处理,并且已经被组件特定的渲染器显式渲染了,所以它们不需要呈现为“直通”属性。
编写自定义组件时无需担心这一点。您始终可以引入与此类似的您自己的优化,但不建议依赖特定于 Mojarra 的内部优化,因为例如,当您使用 MyFaces 时它们可能根本不起作用。
关于jsf - UIComponent Mojarra 中的方法 handleAttribute(String name, Object value) 在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11854925/
我正在将我的应用程序从 PrimeFaces 3.5.18 + Mojarra 2.1.26 移植到 PrimeFaces 4.0.2 + Mojarra 2.2.4。 当我重新启动服务器时,我得到一
我从 here 下载了 Mojarra 源代码.我还下载了 pom 文件来构建源代码文件。事实证明,代码结构与原来的不同,我需要创建目录,但要创建文件。 我创建了这个目录结构: laptop@Lapt
在阅读一本书的摘要时,我遇到了这个: On the server side, the state can be stored as a shallow copy or as a deep copy.
我有一个大型 richfaces 树,可以选择树中的每个元素,通过 AJAX 加载内容并进行编辑,将您重定向到新页面。这一直很有效,直到我正在处理一个特别大的文档并且保存不再有效。您被重定向到显示正确
我有一个重要的问题。 我过去使用过 JSF 1.2。我使用了一些基本的标签,比如 像这样的 RichFaces 为了使用 ajax 功能,我使用了 例如。我已经使用 q jetty
每当我将 war 部署到 wildfly 8 或 10(在这种情况下,它是一个 jax-rs 服务)时,我会看到以下行 [javax.enterprise.resource.webcontainer.
我有一个在 Mojarra 2.1.1/Glassfish 3.1 上运行的应用程序,现在已经增长到 150,000+代码行。该应用程序将 ajax 与 ViewScoped 托管 bean 和页面重
https://javaserverfaces.java.net/nonav/2.2/releasenotes.html列出了 JSF2.2 的两个不同版本分支,奇怪的是,2.2.8-xx 似乎比 2
目前尚不清楚我是否应该使用 MyFaces 或 Mojarra 作为 JSF 2.0 的 PrimeFaces 实现。 PrimeFaces 与其中一个的问题较少吗? 最佳答案 根据 Primefac
如何在JBoss服务器中升级Mojarra,并告诉它使用给定的Mojarra 2.x JAR代替启动日志中指示的JBoss自己的jboss-jsf-api_2.1_spec-2.0.1.Final.j
我从 JSF2.0 开始,我使用了教程作为引用,但我有以下问题: 本教程仅使用了 2 个库:来自 Mojarra 项目的 jsf-api.jar、jsf-impl.jar(但也有 JSTL)。 我也尝
我很高兴看到 f:ajax 现在内置了 delay 支持。不太高兴它不起作用。有一个错误导致它失败,似乎是因为接收指定延迟的方法需要一个数字而不是一个字符串。 无论如何,它将在 2.2.4 版本中修复
我应该在 JSF 页面中使用什么 Doctype?前几天我试图从 Mojarra 2.1.13 迁移到 2.1.18,似乎解释文档类型的方式发生了变化。在根模板中,我遵循 DOC TYPE 我也必
我有一个基于 Mojarra (JSF 2) 构建的 Web 应用程序。该应用程序部署在 WebSphere 7 上。我的应用程序的 session 使用率非常高。我使用 View 范围的 bean,
请问TomEE用mojarra代替myfaces有什么好办法吗?我试图在我的 pom.xml 中添加以下内容。 org.glassfish javax.faces ${mojarra-version
我必须调试部分 mojarra 2.1.3 javascript 源代码。不幸的是,它们现在以缩小版本(jsf.js)提供。我在源代码中找到了 jsf_uncompresses.js,我如何告诉 mo
我决定尝试 JSF 2.2(或者我们目前拥有的),所以我获取了最新的 Mojarra 快照构建并进行了设置。现在我有一个使用 prettyphoto 的模板。它在 JSF 2.1 上运行良好,但当我更
我尝试使用 JSF、Eclipse 和 Maven 创建简单的项目。我用过 javax.faces jsf-api 2.1 provided 由 Maven jsf-api 下载。但是,如果我理解
我升级到 Mojarra JSF 2.2.1 (从 2.1.22 开始),从那时起,对于我的每个请求,我在控制台中都有一个异常: GRAVE: JSF1094: Could not decode fl
我想更新我的 JSF 应用程序以使用 Mojarra 版本 2.1.8。我将这些行添加到 WAR 包的 POM 文件中: org.glassfish javax.faces
我是一名优秀的程序员,十分优秀!