Оценка «визуализированного» атрибута h: outputStylesheet внутри составного - PullRequest
1 голос
/ 12 сентября 2011

У меня есть проблема, связанная с атрибутом «render» элемента ah: outputStylesheet внутри моего составного компонента.

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

Я что-то упустил, или это просто странная ошибка?Я работаю на Tomcat v7.0 и JSF2.0

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Хорошо,

Я думаю, я нашел, почему это происходит:

Вместо оценки EL перед передачей его в атрибут «rendered», передается полный EL. Поскольку компонент outputSytylesheet не знает о cc.attrs, он всегда оценивает его как false.

So

<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 голосов
/ 03 сентября 2015

Пробовал с 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" />

Надеюсь, это кому-нибудь поможет. Я всегда открыт для более чистого решения;)

0 голосов
/ 25 мая 2013

У меня та же проблема, я хочу иметь возможность указать тему для моего компонента через атрибут "тема". К сожалению, переменные "cc.attrs" недоступны для компонента "h: outputStyleSheet".

Я открыл вопрос в JSF JIRA: https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1195

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...