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

Smu*_*tje 9 jsf

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

适用于只能嵌套一个UIComponent子项的情况,例如facet.如果存在"style"或"styleClass"属性,并且"layout"属性的值为"block",则渲染"div"元素,输出"style"属性的值作为"style"属性和"styleClass"属性的值作为"class"属性的值.否则,如果"layout"属性不存在,或者"layout"属性包含"block"以外的值,则渲染"span"元素,输出"style"属性的值作为"style"的值"attribute"和"styleClass"属性的值作为"class"属性的值.

的情况下

<h:panelGroup id="id" layout="block">
    <!-- ... --->
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

要么

<h:panelGroup layout="block" style="margin-right: 10px;">
    <!-- ... --->
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

a div正在呈现:

<div id="id">
</div>
Run Code Online (Sandbox Code Playgroud)

各自

<div style="margin-right: 10px;">
</div>
Run Code Online (Sandbox Code Playgroud)

但省略时id(如果不想updatepanelGroup)或者style(如果不想样式的panelGroup)没有div被渲染和生成的HTML可以搞砸那些布局.除了探索JSF的领域之外,panelGroup还可以使用a来有条件地使用其rendered标志来呈现子元素,但如前所述,当省略两个提到的属性时,结果是有条件地呈现但没有a div,例如

<h:panelGroup layout="block" rendered="true">
<it>Without DIV.</it>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

导致

<it>Without DIV.</it>
Run Code Online (Sandbox Code Playgroud)

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

Min*_*win 4

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

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

  1. 是否至少设置了“id”或“style”或“styleClass”属性之一?
    是的:
    a. <div>如果layout=“block”,则渲染a ,否则
    b。渲染<span>(layout =“乱码”或不存在)

    不:

  2. 不渲染 html 组件。如果您想使用“渲染”或只能嵌套一个组件(即<f:facet>),仍然很有用

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