gpt4 book ai didi

java - JSF 1.1 : Conditionally hide raw HTML and tags

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:21 25 4
gpt4 key购买 nike

我正在尝试更改 JSF 1.1 页面以有条件地隐藏页面的部分内容。该页面是使用混合的原始 HTML 和标签构建的。具体来说,我有以下内容:

<table>
<tr>
<td>Foo</td>
<td><h:inputText ... /></td>
</tr>
<tr>
<td>Bar</td>
<td><h:inputText ... /></td>
</tr>
<!-- more stuff, including <h:dataTable>
</table>

我想将其包装在一个有条件隐藏整个表格的标签中,但我似乎无法弄清楚。这是我尝试过的:

  • 将标记包装在 <h:panelGroup rendered="..."> 中。虽然此正确显示/隐藏标记,但所有原始 HTML 都会从生成的 HTML 中剥离。
  • 将标记包装在 <f:verbatim> 中。这不起作用,因为在 JSF 1.1 中逐字标记没有渲染属性
  • 将整个内容包裹在 <h:panelGroup rendered="..."><f:verbatim> 中组合。这与第一次尝试的效果相同。
  • 我也尝试过<f:view><f:subview>没有效果。

我知道可以在 JSF 页面中包含 JSTL 标记并使用 <c:if>但我想避免这种情况。有什么想法吗?

注意:我意识到(至少对于某些人来说)混合 HTML 和 JSF 被认为是不好的做法,但是这个页面是由其他人创建的,我只需修改它(它是一个有点大的页面,上面的 HTML 只是其中的一个小片段)..

最佳答案

要么替换<table>通过<h:panelGrid> .

<h:panelGrid columns="2">
<h:outputText value="Foo" />
<h:inputText ... />

<h:outputText value="Bar" />
<h:inputText ... />

<!-- more stuff, including <h:dataTable>
</h:panelGrid>

或者使用 CSS display:none/block:

<table style="display: ${some condition ? 'none' : 'block'};">

或者直接升级到 JSF 1.2。从技术上讲,JSF 1.1 Web 应用程序可以轻松升级到 JSF 1.2,无需更改任何代码。只需更新 JAR 并更改 faces-config.xml 即可根声明,用 JSF 1.2 XSD 替换 JSF 1.1 DTD。 JSF 1.2 附带了一个改进的 View 处理程序,它消除了 <f:verbatim>噩梦(即不再需要它)。它还附带了许多错误修复和性能增强,您将非常感激。

<小时/>

与具体问题无关,至于您所说的混合 HTML 和 JSF 是一种不好的做法,这不一定是真的。至少从 JSF 1.2 开始就不再是这样了。在 JSF 1.0/1.1 上,您需要使用 <f:verbatim>这反过来确实是一个开发/维护的痛苦。这导致了一个错误的神话:混合 JSF/HTML 是“不好的”。另请参阅What are the main disadvantages of Java Server Faces 2.0?了解有关这方面的一些历史。

关于java - JSF 1.1 : Conditionally hide raw HTML and tags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12313245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com