除非给出 ID,否则不呈现没有样式或 styleClass 的 panelGroup

Posted

技术标签:

【中文标题】除非给出 ID,否则不呈现没有样式或 styleClass 的 panelGroup【英文标题】:panelGroup without style or styleClass is not rendered unless ID is given 【发布时间】:2014-11-16 10:58:46 【问题描述】:

根据http://xmlns.jcp.org/jsf/html的标签库,h:panelGroup

适用于只有一个 UIComponent child 可以嵌套,例如在构面的情况下。 如果存在“style”或“styleClass”属性,并且 “布局” 属性的值为“block”,渲染一个“div” 元素, 输出“style”属性的值作为 “style”属性和“styleClass”属性的值作为 “类”属性的值。否则,如果“布局”属性 不存在,或“布局”属性包含其他值 比 “block”,渲染一个“span”元素,输出值 "style" 属性作为 "style" 属性的值,并且 价值 “styleClass”属性作为“class”的值 属性。

万一

<h:panelGroup id="id" layout="block">
    <!-- ... --->
</h:panelGroup>

<h:panelGroup layout="block" style="margin-right: 10px;">
    <!-- ... --->
</h:panelGroup>

正在渲染div

<div id="id">
</div>

各自

<div style="margin-right: 10px;">
</div>

但是当省略id(如果不想updatepanelGroup)或style(如果不想设计panelGroup)没有div是被渲染并且生成的 HTML 可能会弄乱布局。进一步探索 JSF 领域,panelGroup 也可用于使用其 rendered 标志有条件地呈现子元素,但如前所述,当省略提到的两个属性时,结果将有条件地呈现但没有 div,例如

<h:panelGroup layout="block" rendered="true">
<it>Without DIV.</it>
</h:panelGroup>

导致

<it>Without DIV.</it>

在此询问之后,我想与 *** 社区核实一下,我的理解是正确的,当不使用 panelGroup 作为命名容器或习惯样式时,最好解决条件渲染部分(如果需要)使用ui:fragment 和带有硬编码div 的布局部分。是这样吗?

【问题讨论】:

【参考方案1】:

注意:我们讨论的是h:panelgroup 是否会渲染任何HTML 组件,但除非render="false" 内部组件在任何情况下都不会被阻止渲染。

h:panelgroup 的行为树由两个检查组成:

    是否至少设置了“id”或“style”或“styleClass”属性之一?是: 一种。如果 layout="block",则呈现&lt;div&gt;否则 湾。渲染一个&lt;span&gt;(layout="gibberish" 或不存在)

    否:

    不呈现 html 组件。如果您想使用“渲染”或只能嵌套一个组件(即&lt;f:facet&gt;),仍然很有用

布局属性的测试只在上面的 1. 之后进行。由于您的第三个示例进入 no 分支,因此它被忽略了。

【讨论】:

如果不存在 1 中提到的属性,是否会根据规范忽略 rendered?所以总是呈现&lt;h:panelGroup layout="block" rendered="false"&gt;BLA&lt;/h:panelGroup&gt;? (现在无法从我的手机中检查实现的来源或规格......)请参阅***.com/questions/43611107/… @Kukeltje 渲染属性设置为 false 将阻止将 div/span 和内部组件渲染到 &lt;h:panelGroup&gt; - 问题解决的不是组件渲染的控制, 是一种行为。

以上是关于除非给出 ID,否则不呈现没有样式或 styleClass 的 panelGroup的主要内容,如果未能解决你的问题,请参考以下文章

除非鼠标移动,否则 Java 物理循环(按间隔重绘)不稳定

Java Scanner - 除非存在引号,否则用空格分隔?

除非我先刷新,否则 React 应用程序中的 Firestore 文档字段更新会给出 TypeError

无框网格定位/浮动样式

除非刷新,否则谷歌地图无法正确显示

Ajax Javascript 在不刷新页面的情况下不会改变样式