阅读this answer之后,我仍然感到难过。我同意应该避免使用JSTL,并了解其评估是如何在错误的阶段进行的。但是,根据facelets开发网站上的documentation,<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>
...
答案 0 :(得分:0)
另一个建议是使用
<h:panelGroup>
,但在响应中插入<div>
元素
<h:panelGroup>
默认情况下不会呈现<div>
。它只会在您添加layout="block"
时呈现。对于所有其他HTML属性(例如id
,styleClass
等),它只会呈现<span>
。如果不存在layout
属性且缺少所有其他HTML属性,则会呈现 nothing 。