读完这个答案后,我仍然很难过。我同意应该避免 JSTL,并理解它的评估是如何在错误的阶段发生的。但是,根据 facelets 开发站点上的文档,标签似乎<ui:fragment>
只支持两个属性,id
并且binding
. 所以,即使有一些实现支持rendered
,你似乎也很想利用它。然而,另一个建议是使用<h:panelGroup>
,它会在响应中插入一个<div>
元素,这可能会导致不良副作用(例如将您的内容从内联更改为块)。有谁知道解决这个问题的方法?特别是,我正在尝试以下操作:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition>
<ice:selectOneListbox binding="#{binding}" rendered="#{modeExisting}">
<f:selectItems
value="#{binding.allTagsSelectItems}" />
</ice:selectOneListbox>
<ice:inputText binding="#{binding.name}" />
<ice:inputText binding="#{binding.description}" />
</ui:composition>
</html>
这基本上是一个列表框,用于选择具有名称和描述的元素,选择后将允许用户编辑它们。我可以<ice:panelGroup>
在块周围放置一个,并使用它的渲染属性,但同样,注入额外的 div 可能会产生副作用。有什么办法可以使这项工作?
此外,可能值得一提的是,我正在使用与这个 facelet-taglib 配对的上述自定义组件:
<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://www.mitre.org/asias/jsf</namespace>
<tag>
<tag-name>configurationTagEditor</tag-name>
<source>../component/configurationTagEditor.xhtml</source>
</tag>
<tag>
<tag-name>configurationTagSelector</tag-name>
<source>../component/configurationTagSelector.xhtml</source>
</tag>
<tag>
<tag-name>configurationTagRegexTable</tag-name>
<source>../component/configurationTagRegexTable.xhtml</source>
</tag>
</facelet-taglib>
为了让我在我的 jsf xhtml 中使用它:
...
<ice:panelTab label="Existing" styleClass="configurationTagsExisting">
<m:configurationTagEditor tag="#{configuration.existingTag}" />
</ice:panelTab>
...