除非给出 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
(如果不想update
panelGroup
)或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",则呈现<div>
,否则
湾。渲染一个<span>
(layout="gibberish" 或不存在)
否:
不呈现 html 组件。如果您想使用“渲染”或只能嵌套一个组件(即<f:facet>
),仍然很有用
布局属性的测试只在上面的 1. 之后进行。由于您的第三个示例进入 no 分支,因此它被忽略了。
【讨论】:
如果不存在 1 中提到的属性,是否会根据规范忽略rendered
?所以总是呈现<h:panelGroup layout="block" rendered="false">BLA</h:panelGroup>
? (现在无法从我的手机中检查实现的来源或规格......)请参阅***.com/questions/43611107/…
@Kukeltje 渲染属性设置为 false 将阻止将 div/span 和内部组件渲染到 <h:panelGroup>
- 问题解决的不是组件渲染的控制, 是一种行为。以上是关于除非给出 ID,否则不呈现没有样式或 styleClass 的 panelGroup的主要内容,如果未能解决你的问题,请参考以下文章
Java Scanner - 除非存在引号,否则用空格分隔?