我在bean上有这个方法:
public boolean isLinkInDescriptionForCheckbox(final Service service) {
logger.info("Testing if there is a link for {}", service);
return Service.UK_ADDRESS_CORRECTION == service;
}
...这在我的JSP中:
<c:if test="#{serviceUiDescriptions.isLinkInDescriptionForCheckbox(service)}">
我的日志告诉我:
c.n.c.s.c.ServiceUiDescriptions - Testing if there is a link for null
而且这很好用:
<label for="checkbox_#{service.name()}"> #{serviceUiDescriptions.getDescriptionForCheckbox(service)}</label>
...这是c:if
代码
所以:在前一行中,service不为null,但在c:if
行服务的测试中为null。
这是整个片段
<ui:repeat var="service" value="#{servicesBean.getAvailableServicesOfGroup(servicePresentationGroup)}">
<div class="servicePresentation" title="#{serviceUiDescriptions.getLongDescription(service)}">
<span class="checkboxSpan">
<input type="checkbox” name="checkbox_#{service.name()}" value="true" checked="checked"
id="checkbox_#{service.name()}" />
</span>
<h2>
<label for="checkbox_#{service.name()}"> #{serviceUiDescriptions.getDescriptionForCheckbox(service)}</label>
<c:if test="#{serviceUiDescriptions.isLinkInDescriptionForCheckbox(service)}">
<span class="smallText">
<h:outputLink value="#{serviceUiDescriptions.getLinkInDescriptionForCheckbox(service)}" >
#{serviceUiDescriptions.getLinkDescriptionInDescriptionForCheckbox(service)}
</h:outputLink>
</span>
</c:if>
</h2>
</div>
</ui:repeat>
这就是我得到的 - 看看没有链接:
答案 0 :(得分:2)
这两个陈述可能是一行接一行,但它们不会同时执行。 <c:if>
是一个JSTL-Tag,在视图构建期间执行。另一个表达式将包含在<h:outputText>
中,该<c:if>
将在视图渲染时执行。我想这项服务将在两者之间创建。
要解决您的问题,您可以将<ui:fragment rendered="#{serviceUiDescriptions.isLinkInDescriptionForCheckbox(service)}">
替换为
<span>
或用
替换<h:panelGroup styleClass="smallText" rendered="#{serviceUiDescriptions.isLinkInDescriptionForCheckbox(service)}">
元素
<c:if>
(没有{{1}})。
另见: