我正在将旧项目从JSF 1.1升级到JSF 2.2。具体来说,我正在将JSF实现从MyFaces 1.1升级到MyFaces 2.2.12,用Facelets替换JSP并升级/替换过时的标记库。我主要使用Migrating from JSF 1.2 to JSF 2.0作为指导。
该项目在其JSP页面中使用了一些名为htmLib
的标记库,其名称空间为http://jsftutorials.net/htmLib
。我在jsftutorials网页上或其他地方都找不到关于这个标签库的任何文档,但显然它在JSP页面中用于包含<div>
或<table>
等纯HTML标签。
由于现在可以在带有JSF2的XML Facelets中使用纯HTML标记,我现在正在从htmLib
taglib中删除所有标记,例如<htm:div>...</htm:div>
,并用{<div>...</div>
之类的纯HTML标记替换它们。 1}}。
但是,htmLib
中使用的某些标记包含条件渲染的render
属性,如下所示:
<htmLib:h4 render="someCondition">
...
</htmLib:h4>
因为纯HTML标签没有render
属性用于此目的,我正在寻找另一种有条件地呈现纯HTML标签的方法,并在SO上发现了这个答案:How to conditionally render plain HTML elements like <div>s?
所以,我的想法是用类似
的方法替换上面的结构<ui:fragment render="someCondition">
<h4>
...
</h4>
</ui:fragment>
我的问题:
<ui:fragment>
将HTML标记包装在render
标记内
属性推荐的方式来有条件地呈现HTML标记,或
此方法仅对链接问题中的案例有效并推荐吗? <ui:fragment>
包装方法是否有效,无论其中包含什么类型的纯HTML?<ui:fragment>
块吗?答案 0 :(得分:3)
没有限制。甚至不包裹ui:fragment
。
基本上:
ui:fragment
。span
元素,请使用h:panelGroup
。div
元素,请使用h:panelGroup layout="block"
。你里面的HTML不是问题。 JSF作为服务器端框架,在服务器中执行所有HTML构建/呈现作业,因此在发送响应之前,JSF / facelet标记会转换为HTML。您在里面使用的所有纯HTML都将保留为HTML。
但,从1.x迁移时要小心using tag handlers inside UI Components。标记处理程序(ui:include
,c:if
,c:forEach
)评估之前 UI组件(通常包含rendered
子句)。这是JSF 2中的冲突源。