非 JSF 组件的条件渲染(普通 HTML 和模板文本)

问题描述 投票:0回答:2

我正在尝试有条件地渲染

<tr>
,因此我无法使用
<h:panelGroup>
,因为它将渲染为
<span> or <div>

我目前的(工作)方法如下:

<h:outputFormat rendered="#{negotiator.maySend}">
    <tr> my tr stuff </tr>
</h:outputFormat>

这可行,但我不确定这是否是滥用

<h:outputFormat>
的方式 - 之前我使用过
<h:outputLabel>
,但这在IE中呈现为
<label>

我也阅读了这个问题的答案,但如上所述,它们对我不起作用,因为

<tr>
如何不在 JSF 中渲染整个块?

html jsf conditional-rendering
2个回答
24
投票

我无法使用

<h:panelGroup>
,因为它会渲染为
<span>
<div>

显然你没有仔细测试。如果您不指定最终应在客户端出现的属性,则

<h:panelGroup>
将不会渲染任何内容,例如
layout
id
styleClass
等。

因此,这在技术上应该可以完美地工作。

<h:panelGroup rendered="#{negotiator.maySend}">
    <tr> my tr stuff </tr>
</h:panelGroup>

但是,更好的主要目的是使用

<ui:fragment>

<ui:fragment rendered="#{negotiator.maySend}">
    <tr> my tr stuff </tr>
</ui:fragment>

顺便说一句,这也可以通过

<f:verbatim>
实现,但自 JSF 2.0 起已弃用,因为它是专门为在 JSP 中使用而设计的。

另请参阅:


0
投票

实现此目的的一种方法是将表格行的显示样式设置为无。如果满足你的条件,然后使用javascript将样式设置为table-row。

像这样:

 <tr id="tableRow" style="display: none;">
    my tr stuff
 </tr>

JS:

const show = true; // Do some logic here
 if (show) {
    document.getElementById("tableRow").style.display = "table-row";
  }
© www.soinside.com 2019 - 2024. All rights reserved.