【发布时间】:2014-05-07 18:58:16
【问题描述】:
我在一个 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 行的测试中,service 为空。
这是整个片段
<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>
这是我得到的 - 看没有链接:
【问题讨论】:
-
你的 JSP 中哪里定义了服务?
-
添加了整个片段
-
servicesBean.getAvailableServicesOfGroup(servicePresentationGroup)是否为空? JSP 的表达式语言是"null friendly",所以即使service为null,service.name()也不会引发异常,但是一旦将某些内容传回Java 领域,就需要小心取消对null 的引用。 -
对于我来说,这看起来像 JSF。如果是 JSF,请考虑立即评估测试条件 ('test="${blah') 而不是延迟(不确定这是正确的术语)'test="#{blah'。
-
@DwB 抱歉,改成 $ 效果不好