1

コンポジットコンポーネント内のah:outputStylesheetの「rendered」属性に関して問題があります。

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

ELが「true」と評価されても機能しません。一方

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

正しくレンダリングされている/レンダリングされていない。

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

  • ELを「true」または「false」に置き換えると、属性は意図したとおりに機能します。
  • ELを他の評価に置き換えると、それも機能します。たとえば、#{someBean.somevalue =='somevalue'}または単に#{1> 0}

私は何かが足りないのですか、それともこれは奇妙なバグかもしれませんか?Tomcatv7.0およびJSF2.0で実行しています

4

3 に答える 3

2

Ok、

私が見つけたと思う、なぜこれが起こっているのか:

ELを評価する代わりに、「rendered」属性に渡す前に、完全な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" />

コンポーネント内では常に「false」と評価されます。

他の誰かがこの「バグ」を経験した場合、これは私が最も便利な「解決策」を見つけたものです。

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

この問題の適切な解決策を知っている人がいたら、遠慮なく応答してください:)

よろしく、クリスチャン

編集:cssが複合コンポーネントの外部でレンダリングされ、したがってcc.attrsを評価できないため、可能性もあります。

于 2011-09-14T07:58:45.217 に答える
0

同じ問題が発生しています。属性「theme」を使用して、コンポーネントのテーマを指定できるようにしたいと考えています。残念ながら、「cc.attrs」変数は「h:outputStyleSheet」コンポーネントでは使用できません。

JSF JIRAで問題を開きました: https ://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1195

于 2013-05-24T20:19:52.007 に答える
0

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

これが誰かに役立つことを願っています。私は常によりクリーンなソリューションを求めています;)

于 2015-09-03T20:44:34.817 に答える