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

我应该使用Facelets的“ jsfc”属性吗?

郝冥夜
2023-03-14
问题内容

Facelets使用 jsfc* 属性将HTML元素转换为其关联的 JSF
组件。这对于快速原型制作非常有用,因为它允许您使用视觉设计工具创建视图。但是,我最近发现了 Cay Horstmann的
这篇
博客文章,他浪费了
jsfc 以及 h:dataTable 等复杂组件的使用。 __
***

这让我感到震惊,因为 Cay Horstmann 是我最喜欢的Java书籍的多本作者。但是,我的Google-
fu技能在试图确定问题的范围/性质时,结果是零,除了Ed
Burns最近的帖子(他喜欢 jsfc) (他毕竟是 JSF 的共同规范负责人)之外。所以我的问题很简单,是否建议将 jsfc
与Facelets 一起使用?如果不是的话,会带来什么问题。


问题答案:

就像您说的那样,jsfc当您必须将HTML原型“转换”为JSF页面时,该属性实际上很有用。例如,当您有HTML输入文本时:

<input type="text" .../>

您可以添加jsfc属性以将该HTML组件转换为JSF组件:

<input type="text" jsfc="h:inputText" .../>

这等效于编写以下JSF代码:

<h:inputText .../>

如Facelets文档的此处或此处所述,该属性jsfc还可用于“映射” Facelets组件。例如,您可以删除一部分HTML代码:

<span jsfc="ui:remove">
This won't be compiled either <h:outputText value="#{foo.bar}"/>
</span>

您还可以使用以下属性创建表:

<table>
    <tr jsfc="ui:repeat" value="#{dept.employees}" var="emp" class="#{emp.manager ? 'mngr' : 'peon'}">
       <td>#{emp.lastName}</td>
       <td>#{emp.firstName}</td>
    </tr>
</table>

在此示例中,我们没有将该表链接到h:datatable组件,而是使用JSF组件ui:repeat在行上进行迭代,并使用HTML代码创建了一个表。

如您所见,该jsfc属性可用于在JSF页面中将一个HTML组件转换为一个JSF组件。因此,对于复杂的组件(例如数据表),您将不得不使用一些替代方法(使用ui:repeat代替h:datatable组件)。

还有一点是,您将无法使用第三方库组件,例如RichFaces,IceFaces,Tomahawk等提议的组件。这些库确实是JSF的兴趣之一。

总结一下:jsfc将HTML原型转换为JSF应用程序可能很有用,本质上用于创建概念证明或设计通用UI。但是,我认为最好在“真正的”开发开始后避免使用此组件。



 类似资料:
  • 我写了以下代码: 我只使用了一个useState在一个对象中存储“name”、“link”、“error”等属性。因为我想将FormObj和ValidateLink的逻辑保持在一起。所有三个属性仅使用一个useEffect。因此,我认为最好将所有三个属性都保留在useState中,而不是创建3个不同的useState。 但是我的经理和技术架构师告诉我要为每个属性创建3个useState,一个use

  • 哈希集由哈希映射支持。从它的JavaDoc: 这个类实现了Set接口,由哈希表(实际上是一个HashMap实例)支持 在查看源时,我们还可以看到它们之间的关系: 因此,一个<code>哈希集 使用而不是,不是更有效吗?进一步考虑的是,如果环境允许使用而不是,我们是否应该完全放弃,直接使用。 触发这些想法的基本问题是以下情况:我有一组具有以下属性的对象: 大型对象集合 如何有效地检查集装箱? 我想到

  • 问题内容: 我想将对象集合添加到arrayList,仅当特定属性不为null时。 我正在考虑扩展ArrayList并在子类中实现检查。 一种替代方法是在将属性放入Arraylist中之前检查属性,但这意味着,如果我需要根据逻辑将对象添加到arraylist中,则我将不得不分散if检查每个位置。 我想知道您对此有何想法……再想一想,这是否太过分了? 问题答案: 实际上,我建议使用记录良好的 Deco

  • 我在研究Thymeleaf,发现在几乎所有的例子中,都有Thymeleaf的标记值和标准HTML值,比如: 这些标准标记值,如或等,被控制器忽略,不会在页面上呈现。 我想知道,让它们来提高代码可读性只是一种好的做法,还是最好删除它们来清理代码? 因为对于编译器来说,它们是无用的,对渲染结果没有任何影响。

  • 我想问你,我应该如何设置和获取属性值?我应该这样做吗,例如直接从另一个类并将属性设置为公共属性,或者更好的做法是将属性设置为私有并更改它或通过使用此类中实现的公共函数来获取它? 第一种情况: 第二种情况: 这段代码显然有点简化...

  • 我是否需要为我的复杂Web应用程序使用单独的Docker容器,或者我可以将所有必需的服务放在一个容器中?有人能解释一下为什么我应该将我的应用程序划分为许多容器(例如容器,容器,容器)当我能够在一个容器中安装和启动所有东西时?