2010-12-03 135 views
1

閱讀this answer後,我仍然難倒。我同意應該避免使用JSTL,並理解它的評估是如何在錯誤的階段發生的。但是,根據facelets開發站點上的documentation<ui:fragment>標籤似乎只支持兩個屬性,即idbinding。所以,即使一些實現支持rendered,看起來你也會試圖利用它。另一個建議是使用<h:panelGroup>,但是,在響應中插入<div>元素可能會導致不良副作用(如將內容從內聯更改爲塊)。有沒有人知道解決這個問題的方法?特別是,我試圖如下:Facelet自定義組件 - 防止渲染

<!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-標籤庫配對上面的自定義組件:

<?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

另一個建議是使用<h:panelGroup>,但是,在響應中插入了<div>元素

默認情況下,<h:panelGroup>不會顯示<div>。它只會呈現如果你添加layout="block"。對於所有其他HTML屬性(如id,styleClass等),它只呈現<span>。如果沒有layout屬性存在並且所有其他HTML屬性都不存在,則不會顯示任何

+0

謝謝,我不知道。我的參考資料是直接使用Icefaces而不是JSF的,而相應panelGroup元素的icefaces文檔則說:「panelGroup組件在它的子組件周圍呈現一個」div「元素,輸出」style「屬性的值作爲「style」屬性和「styleClass」屬性的值作爲「class」屬性的值。「再次,謝謝,我將使用JSF panelGroup來達到此目的。 – Lucas 2010-12-03 18:59:55