我遇到了一个问题,涉及复合组件中h: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;" />正在正确呈现/未呈现。
虽然这已经相当令人困惑,但更糟的是:
我是不是漏掉了什么,还是这只是个奇怪的虫子?我正在运行TomcatV7.0和JSF2.0
发布于 2011-09-14 07:58:45
好的,
我想我找到了,为什么会这样:
在将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‘。
如果其他人经历过这种"bug",这就是我找到的最方便的“解决方案”:
<h:outputStylesheet library="css" name="#{cc.attrs.enabled ? 'mainDark.css' : 'empty.css'}" target="head" />如果任何人知道这一问题的适当解决办法,请随时作出进一步答复:)
向你问好,克里斯蒂安
编辑:也可以,因为css是在复合组件之外呈现的,因此不能计算cc.attrs。
发布于 2013-05-24 20:19:52
我也有同样的问题,我希望能够通过属性“主题”为我的组件指定一个主题。不幸的是,"h:outputStyleSheet“组件不能使用"cc.attrs”变量。
我在JIRA中打开了一个问题:https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1195
发布于 2015-09-03 20:44:34
在JSFmojarra2.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" />我希望这能帮上忙。我总是对更清洁的解决方案敞开心扉;)
https://stackoverflow.com/questions/7386344
复制相似问题