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

时间:2014-09-22 12:55:53

标签: jsf

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

  

打算在只有一个的情况下使用               UIComponent子可以嵌套,例如facet。               如果存在“style”或“styleClass”属性,则               “布局”               属性以“块”的值存在,呈现“div”               元件,               输出“style”属性的值作为的值               “style”属性和“styleClass”属性的值为               “class”属性的值。否则,如果是“布局”属性               不存在,或“layout”属性包含其他值               比               “阻止”,渲染一个“span”元素,输出值               “style”属性作为“style”属性的值,以及               值               “styleClass”属性的值作为“类”的值               属性。

如果是

<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 {1}})没有呈现div,结果HTML可能会弄乱一些布局。此外,探索JSF的领域,panelGroup也可用于使用其rendered标志有条件地呈现子元素,但如前所述,当省略两个提到的属性时,结果是有条件地呈现但没有{{{} 1}},例如

div

导致

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

在此调查之后,我想与Stackoverflow社区核实我理解正确的是,当不使用<it>Without DIV.</it> 作为命名容器或习惯样式时,其元素最好解决条件呈现部分(如果需要)使用panelGroup和布局部分使用硬编码ui:fragment。是这样吗?

1 个答案:

答案 0 :(得分:2)

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

h:panelgroup的行为树包含两项检查:

  1. 是否设置了“id”或“style”或“styleClass”属性中的至少一个?
     是:
     一个。如果layout =“block”,,则呈现<div>  湾呈现<span>(布局=“乱码”或不存在)

    否:

  2. 不呈现任何HTML组件。如果你想使用“渲染”或只能嵌套一个组件(即<f:facet>
  3. 仍然有用

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