当前位置: 首页 > 面试题库 >

替代ui:JSF中的片段

孔棋
2023-03-14
问题内容

我正在寻找一种在JSF中呈现代码段的受支持方法,我通常使用这种方法:

<ui:fragment rendered="#{condition}">
   <h:outputText value="text 1"/>
   <h:outputText value="text 2"/>
   <h:outputText value="text 3"/>
</ui:fragment>

由于ui:fragment不支持大多数IDE渲染(例如netbeans将其标记为错误,但它可以工作,因为在JSF中参数是继承的。

解决此问题的一种方法是使用其他结构(例如,如果您使用SEAM),则可以使用

<s:div rendered="#{condition}">
   ....
</s:div>

另一种方法是在所有内部内容中设置呈现,如下所示:

<h:outputText value="text 1" rendered="#{condition}"/>
<h:outputText value="text 2" rendered="#{condition}"/>
<h:outputText value="text 3" rendered="#{condition}"/>

但是我不喜欢这种方式,因为您必须将渲染添加到每个元素中。

另一种方法是使用<c:if test="#{condtion}">BUT
c:if从JSF树中删除元素,而这并不是您一直想要做的,尤其是在使用AJAX的情况下。

你们还有其他解决方案吗?


问题答案:

由于ui:fragment不支持大多数IDE渲染(例如Netbeans将其标记为错误,但它可以工作,因为在JSF中参数是继承的)

这实际上是JSF 2.0
Facelets标记文件声明中的错误(在Mojarra中,就是该com/sun/faces/metadata/taglib/ui.taglib.xml文件)。该rendered属性在标记文件声明(以及JSF
2.0
<ui:fragment>标记文档
)中被忽略和丢失,而
实际上 在中存在UIComponent。IDE验证基于标记文件声明,因此会产生误导性的验证错误。此问题已在JSF
2.1中修复,缺少的属性已添加到标记文件声明中(以及JSF 2.1
<ui:fragment>标记文档中)。

如果不能忽略IDE警告或升级到JSF
2.1,则可以考虑使用该<h:panelGroup>组件:

<h:panelGroup rendered="#{condition}">
   <h:outputText value="text 1"/>
   <h:outputText value="text 2"/>
   <h:outputText value="text 3"/>
</h:panelGroup>

它输出反正没事,如果你不指定idstylestyleClass和类似的属性,否则简单的<span>将被渲染。

如果您拥有的只是纯原始HTML(即没有JSF组件),那么您也可以考虑使用<f:verbatim>

<f:verbatim rendered="#{condition}">
   text 1
   text 2
   text 3
</f:verbatim>

然而,<f:verbatim>弃用 的JSF 2.0(这反过来也对了一部纪录片的bug,在JSF 2.0
<f:verbatim>标签文件没有提到折旧,但JSF
2.1
<f:verbatim>标签文档一样)。



 类似资料:
  • 当我们在片段之间切换多次时,将不会调用方法。那么,有没有更好的处理恢复操作的方法呢?

  • 问题内容: 这是一个从来没有一个正确答案的问题,我已经在网上搜索了很多次,却找不到解决方案。 它适用于Firefox,Chrome。我的responseText将像Réunion这样返回char,它将显示为奇怪的符号。 我尝试了许多方法,例如编码和解码,在响应文件中设置标头都无效。我没主意了。请帮助某人。 在主文件中,确保设置了内容类型和字符集。 在您的AJAX加载页面中,确保您位于顶部。 问题解

  • 我想在我的Harmony OS应用程序中使用片段,我发现分数是另一种选择。然而,我找不到任何关于如何实现它的资源或教程。有人能举个例子说明如何使用分数和分馏性在Harmony OS中实现片段吗?

  • 我一直在通过Netbeans使用CodeNameOne设计一个应用程序,并遇到了一些问题,特别是“找不到符号”编译错误。经过进一步的研究,我发现这是由于CNO不支持某些库/杂项。 我想知道是否有其他方法可以使用以下库/执行任务: (从文件读取)导入java.io.file;符号:类文件位置:package java.io (抛出FileNotFoundException)导入java.io.Fil

  • 问题内容: 我必须在MySQL中编写这样的查询: 但是MySQL不支持关键字 EXCEPT 。是否有 标准模式 可以正确使用另一个模拟MySQL中的除外的运算符? 问题答案: 您可以使用NOT IN

  • 问题内容: 问题 在解决这个问题之后,似乎基于文件或磁盘的实现可能是解决我在此处提到的问题的正确解决方案。精简版: 目前,我已将实施为。 条目以相当固定的速率连续添加到其中。稍后对此进行详细说明。 最终,无论如何,这意味着JVM耗尽了堆空间。 在工作中,(强烈)建议我使用SQLite解决此问题,但是在问了上一个问题之后,我认为数据库不是适合此工作的合适工具。所以- 让我知道这听起来是否疯狂 -我认