1

读完这个答案后,我仍然很难过。我同意应该避免 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>
...
4

1 回答 1

0

然而,另一个建议是使用在响应<h:panelGroup>中插入一个元素<div>

默认情况下<h:panelGroup>不呈现 a <div>。只有在添加layout="block". 对于所有其他 HTML 属性(如idstyleClass等),它仅呈现<span>. 如果不layout存在任何属性并且所有其他 HTML 属性不存在,则它不呈现任何内容

于 2010-12-03T17:06:24.103 回答