我遇到了一个问题,关于我的复合组件中h: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;" />
正在正确渲染/不渲染。
虽然这已经令人困惑,但情况更糟:
我错过了什么,或者这可能只是一些奇怪的错误? 我正在运行Tomcat v7.0和JSF2.0
答案 0 :(得分:2)
确定,
我想我发现了,为什么会发生这种情况:
在将EL传递给“呈现”属性之前,不是评估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" />
无论如何,将在组件内被评估为'false'。
如果有其他人遇到这个“错误”,这就是我找到最方便的“解决方案”:
<h:outputStylesheet library="css" name="#{cc.attrs.enabled ? 'mainDark.css' : 'empty.css'}" target="head" />
如果有人知道这个问题的正确解决方案,请随时回复:)
致以最诚挚的问候,Christian
编辑:它也可能是,因为css是在复合组件之外渲染的,因此无法评估cc.attrs。
答案 1 :(得分:0)
我遇到了同样的问题,我希望能够通过属性“theme”为我的组件指定一个主题。不幸的是,“cc.attrs”变量不适用于“h:outputStyleSheet”组件。
我在JSF JIRA中打开了一个问题: https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1195
答案 2 :(得分: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" />
我希望这有助于某人。我总是愿意接受更清洁的解决方案;)