为什么此呼叫中的服务为空?

时间:2014-05-07 18:58:17

标签: java jsf

我在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>

这就是我得到的 - 看看没有链接:

look no link

1 个答案:

答案 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}})。

另见: