2011-09-12 35 views
1

我有一個問題,關於我的複合組件中h:outputStylesheet的「呈現」屬性。評估h:outputStylesheet在複合內部的「呈現」屬性

<h:outputStylesheet rendered="#{cc.attrs.value == 'somevalue'}" library="css" name="mainDark.css" target="head" /> 

不起作用,即使EL評估爲「真」。鑑於

<h:outputText rendered="#{cc.attrs.value == 'somevalue'}" value="rendered = true" style="color: red;" /> 

得到正確呈現/未呈現。

雖然這已經是相當混亂,它會變得更糟:

  • 我若只是「真」或「假」,則該屬性按預期工作更換EL。
  • 如果我用一些其他評估替代EL,它也可以。例如#{someBean.somevalue =='somevalue'}或者只是#{1> 0}

我錯過了什麼,或者這可能只是一些奇怪的錯誤? 我在Tomcat V7.0和JSF2.0

+0

我目前的解決方法:''但是我仍然會感興趣,爲什麼會發生這種情況。 –

+0

這不是一個自定義組件。這是一個複合組件。我編輯了標題和標籤。然而,有趣的問題。您使用的是JSF impl/version? – BalusC

+0

噢,對不起爲:)我使用鑽嘴魚科JSF實現2.0.3 –

回答

2

好運行,

我想我發現了,爲什麼發生這種情況:

相反的評價EL,它傳遞到之前的「呈現「屬性,完整的EL傳遞。 由於組件outputSytylesheet不知道cc.attrs,它總是將它評估爲false。

所以

<h:outputStylesheet rendered="#{someBean.somevalue == 'somevalue'}" library="css" name="mainDark.css" target="head" /> 

<h:outputStylesheet rendered="#{2 gt 1}" library="css" name="mainDark.css" target="head" /> 

的作品,因爲它可以進行評估。鑑於

<h:outputStylesheet rendered="#{cc.attrs.somevalue == 'somevalue'}" library="css" name="mainDark.css" target="head" /> 

將全部在組件內評估爲'假'。

如果任何人經歷這個「錯誤」,這是我發現的最方便的「解決方案」:

<h:outputStylesheet library="css" name="#{cc.attrs.enabled ? 'mainDark.css' : 'empty.css'}" target="head" /> 

如果有人知道一個妥善解決這個問題,請隨時進一步迴應: )

最好的問候,基督教

編輯:也有可能是,因爲CSS呈現複合元件的外部,因此無法評估cc.attrs。

0

試圖與JSF鑽嘴魚科2.2。1這個解決方案沒有成功:

<h:outputStylesheet library="css" name="#{cc.attrs.enabled ? 'mainDark.css' : 'empty.css'}" target="head" /> 

現在我發現這個解決方法,以成功地處理這個問題的評價:

<link rel="stylesheet" type="text/css" href="#{request.requestURL.substring(0, request.requestURL.length() - request.requestURI.length())}#{request.contextPath}/javax.faces.resource/#{cc.attrs.includeStyle ? 'style.css' : 'empty.css'}.html?ln=libraryName" /> 

我希望這可以幫助別人。我總是打開一個清潔的解決方案;)