首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算复合内部h:outputStylesheet的“呈现”属性

计算复合内部h:outputStylesheet的“呈现”属性
EN

Stack Overflow用户
提问于 2011-09-12 10:17:19
回答 3查看 1.7K关注 0票数 1

我遇到了一个问题,涉及复合组件中h:outputStylesheet的“呈现”属性。

代码语言:javascript
复制
<h:outputStylesheet rendered="#{cc.attrs.value == 'somevalue'}" library="css" name="mainDark.css" target="head" />

即使EL计算为“true”,也不起作用。鉴于

代码语言:javascript
复制
<h:outputText rendered="#{cc.attrs.value == 'somevalue'}" value="rendered = true" style="color: red;" />

正在正确呈现/未呈现。

虽然这已经相当令人困惑,但更糟的是:

  • 如果用“true”或“false”替换EL,则该属性按预期工作;如果用其他计算值替换EL,则
  • 也会工作。例如,#{someBean.somevalue == 'somevalue'}或仅#{1 > 0}

我是不是漏掉了什么,还是这只是个奇怪的虫子?我正在运行TomcatV7.0和JSF2.0

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-14 07:58:45

好的,

我想我找到了,为什么会这样:

在将EL传递到“呈现”属性之前,不计算EL,而是传递完整的EL。由于组件outputSytylesheet不知道cc.attrs,所以它总是将其计算为false。

所以

代码语言:javascript
复制
<h:outputStylesheet rendered="#{someBean.somevalue == 'somevalue'}" library="css" name="mainDark.css" target="head" />

代码语言:javascript
复制
<h:outputStylesheet rendered="#{2 gt 1}" library="css" name="mainDark.css" target="head" />

有效,因为可以对其进行评估。鉴于

代码语言:javascript
复制
<h:outputStylesheet rendered="#{cc.attrs.somevalue == 'somevalue'}" library="css" name="mainDark.css" target="head" />

都会在组件内部被评估为'false‘。

如果其他人经历过这种"bug",这就是我找到的最方便的“解决方案”:

代码语言:javascript
复制
<h:outputStylesheet library="css" name="#{cc.attrs.enabled ? 'mainDark.css' : 'empty.css'}" target="head" />

如果任何人知道这一问题的适当解决办法,请随时作出进一步答复:)

向你问好,克里斯蒂安

编辑:也可以,因为css是在复合组件之外呈现的,因此不能计算cc.attrs。

票数 2
EN

Stack Overflow用户

发布于 2013-05-24 20:19:52

我也有同样的问题,我希望能够通过属性“主题”为我的组件指定一个主题。不幸的是,"h:outputStyleSheet“组件不能使用"cc.attrs”变量。

我在JIRA中打开了一个问题:https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1195

票数 0
EN

Stack Overflow用户

发布于 2015-09-03 20:44:34

在JSFmojarra2.2.1中尝试了这个解决方案,但没有成功:

代码语言:javascript
复制
<h:outputStylesheet library="css" name="#{cc.attrs.enabled ? 'mainDark.css' : 'empty.css'}" target="head" />

现在,我找到了解决这个评估问题的方法,成功地解决了这个问题:

代码语言:javascript
复制
<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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7386344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档