首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JSF替换<c:if>和fn:toUpperCase()

用JSF替换<c:if>和fn:toUpperCase()
EN

Stack Overflow用户
提问于 2013-08-01 11:49:39
回答 1查看 1.5K关注 0票数 1

这个例子来自于一本关于JSF的书。本文的摘录是在消除<c:if>fn:toUpperCase()的同时重构以下Facelets代码。允许使用<c:forEach>

#{myBean.numbers}返回String["one","two","three"]

因为这本书是关于JSF的,而不是关于Java的,我想现有的Java代码是不会被触及的。但我想不出有什么别的方法能做到这一点。

代码语言:javascript
复制
<c:forEach var="item" items="#{myBean.numbers}">
    <c:if test="#{not fn:endsWith(item,'o')}">
        #{item}
    </c:if>
    <c:if test="#{fn:endsWith(item,'o')}">
        #{fn:toUpperCase(item)}
    </c:if>
</c:forEach>

我唯一能想到的就是使用有条件地使用String#toUpperCase()的转换器,然后我仍然不明白为什么仍然应该允许使用<c:forEach>

代码语言:javascript
复制
<ui:repeat var="item" value="#{myBean.numbers}">
     <h:outputText value="#{item}" converter="conditionalConverter"/>
</ui:repeat>

是否有更多的"Facelets方式“来做到这一点(并且仍然需要使用<c:forEach>)?

更新:而不是<c:if> one仍然可以使用例如<h:outputPanel>,它是rendered-attribute,但是仍然没有Java替代fn:toUpperCase()

我只要求学习的目的。我认为带有转换器的<ui:repeat>-solution是最干净的,并且代表了如何使用JSF。你也这么认为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 12:53:40

对于<c:if>,JSF替代JSTL <c:if>是任何组件上的rendered属性。例如,<h:panelGroup><h:outputText>。如果没有指定的attribtues,则这些组件不会生成额外的标记,这些标记应该以idstyleClass这样的HTML结尾,否则它们会生成<span>

以下是两者的一个例子:

代码语言:javascript
复制
<h:panelGroup rendered="#{not fn:endsWith(item,'o')}">
    #{item}
</h:panelGroup>
<h:outputText value="#{fn:toUpperCase(item)}" rendered="#{fn:endsWith(item,'o')}" />

至于fn:toUpperCase(),JSF别无选择。我不知道为什么需要JSF替代,因为它本质上不是一个标记,而是一个简单的EL函数,它在JSTL和JSF标记中都非常有用。在任何情况下,您都可以在必要时加入CSS text-transform: uppercase。由于这完全发生在客户端,您唯一的问题可能是浏览器支持

代码语言:javascript
复制
<h:outputText value="#{item}" style="text-transform: uppercase" />

(注意:这只是一个例子,通常的做法是将样式放在自己的.css文件中,由<h:outputStylesheet>__加载)

代码语言:javascript
复制
<h:outputText value="#{item}" styleClass="uppercased" />

我认为带有转换器的-solution是最干净的,并且代表了如何使用JSF。你也这么认为吗?

我非常喜欢“使用合适的工具来完成这项工作”。使用JSTL标记有条件地构建JSF组件树。使用JSF组件生成HTML。就这样。另见JSF2中的JSTL .合乎道理?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17993253

复制
相关文章

相似问题

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