2011-09-12 9 views
1

コンポジットコンポーネント内のh:outputStylesheetの "rendered"属性に関する問題があります。コンポジット内のh:outputStylesheetの "rendered"属性の評価

<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;" /> 

が正しくレンダリングされているかレンダリングされていません。

これはすでにかなり混乱しているが、それはさらに悪化します:

  • 私が意図したとおりに属性が働く、ちょうど「true」または「false」でELを交換する場合。
  • 私はELを何か他の評価で置き換えると、それも動作します。例えば、ちょうど#{someBean.somevalue == 'someValueの'}や#{1> 0}

私は何かが足りない、またはこれは単にいくつかの奇妙なバグかもしれませんか? 私はなぜこれが起こっている私は、見つけたと思う、TomcatのV7.0とJSF2.0

+0

私の現在の回避策: ''しかし、私はまだ興味があるでしょう、なぜこれが起こりますか? –

+0

これはカスタムコンポーネントではありません。これは複合コンポーネントです。私はタイトルとタグを編集しました。それにもかかわらず興味深い問題。どのようなJSF impl/versionを使用していますか? – BalusC

+0

ああ申し訳ありません:) Mojarra JSF実装2.0.3を使用しています –

答えて

2

、[OK]を

を実行している:

の代わりに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" /> 

作品、それを評価することができるので。一方、コンポーネント内では、常に「false」と評価されます。

誰にも経験、この「バグ」場合、これは私が最も便利な「ソリューション」を見つけたものです:

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

誰もがこの問題の適切な解決策を知っている必要があり、さらにご返信ください。 )

よろしくは、クリスチャン

EDIT:これは、CSSは、複合成分の外にレンダリングされているので、また、可能性があり、したがってcc.attrsを評価することができません。

0

私は同じ問題を抱えています。私は自分のコンポーネントのテーマを属性 "theme"で指定できるようにしたいと思います。残念ながら、 "c :attrs"変数は "h:outputStyleSheet"コンポーネントでは使用できません。

私はJSF JIRAで問題をオープンしました: https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1195

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" /> 

私は、これは誰かに役立ちます願っています。 )私は現在、よりクリーンなソリューションのために開いています;)

関連する問題