【发布时间】:2013-12-04 10:10:45
【问题描述】:
我想根据 bean 值设置一个 ui:param,我认为使用 c:if 是个好主意。所以我在我的页面中输入了以下代码:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:wai="http://www.id.ethz.ch/wai/jsf"
template="/view/listView.xhtml">
<c:if test="#{subscriptionListController.model.listViewName eq 'mySubscriptions'}">
<ui:param name="title" value="#{msg.subscriptionTitleMySubscriptions}"/>
</c:if>
<c:if test="#{subscriptionListController.model.listViewName eq 'paidSubscriptions'}">
<ui:param name="title" value="#{msg.subscriptionTitlePaidSubscriptions}"/>
</c:if>
<c:if test="#{subscriptionListController.model.listViewName eq 'allSubscriptions'}">
<ui:param name="title" value="#{msg.subscriptionTitleAllSubscriptions}"/>
</c:if>
....
但是参数没有设置...
如果我打印出 #{subscriptionListController.model.listViewName eq 'mySubscriptions'} 的值,我在相应的情况下得到 true,在其他两种情况下得到 false。
一开始我只有2种可能,用三元运算符解决了:
<ui:param name="title" value="#{subscriptionListController.model.listViewName eq 'mySubscriptions' ? msg.subscriptionTitleMySubscriptions : msg.subscriptionTitlePaidSubscriptions}"/>
它奏效了。但现在我有了更多的可能性……
我做错了什么?
【问题讨论】:
-
您不清楚它何时工作/失败。
<c:if>s 看起来不错,但<c:otherwise>完全放错了位置。它属于<c:choose>。代码似乎也不完整,这似乎是一个模板客户端,但我没有看到<ui:define>。您知道 Facelets 会忽略<ui:define>和<ui:composition>之外的任何内容吗? -
<ui:composition>在那里(参见代码的第一行),因此不应忽略它。我删除了<c:otherwise>并添加了c:if。但它仍然不起作用......正如所说,三元运算符没有问题,但c:ifnope......(我编辑了我的代码,因为标题的值是错误的) -
@BalusC 好的,
<ui:define>定义如下。我在那里转移了c:ifcode,现在它可以工作了!但是你现在能解释一下为什么要用燕鸥吗?同上。虽然它在<ui:define>之外也可以工作?此外,我在它之外定义了其他ui:param(就在c:if下方)并且它们工作...... -
@BalusC 您能否将您的评论放入答案中,以便我接受?
标签: jsf-2 primefaces facelets