我在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不为空,但在测试中该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>
这就是我得到的-没有链接:
这两个语句可能一行一行,但不能同时执行。<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>
)。
也可以看看:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句