3

我试图根据列表是否包含给定的项目 ID 在两个不同的命令按钮之间切换:

               <c:if test="#{roomServiceManagerBean.holdinghotelvilla.contains(hotel.hotelvillaId)}">
                    <p:commandButton ajax="true" id="commanddeactivate" update=":roomserviceForm:hoteltable,:roomserviceForm:msgs" actionListener="#{roomServiceManagerBean.deactivateServiceForHotel(hotel.hotelvillaId)}" icon="ui-icon-radio-off" type="submit" value="Remove Service">
                        <f:param name="roomserviceid" value="#{roomServiceManagerBean.roomServiceId}" />
                    </p:commandButton>
                </c:if>
                <c:otherwise>
                    <p:commandButton id="commandactivate" update=":roomserviceForm:hoteltable,:roomserviceForm:msgs" actionListener="#{roomServiceManagerBean.activateServiceForHotel(hotel.hotelvillaId)}" icon="ui-icon-radio-on" type="submit" value="Provide Service">
                        <f:param name="roomserviceid" value="#{roomServiceManagerBean.roomServiceId}" />
                    </p:commandButton>
                </c:otherwise>

但是,它失败了,两个按钮都出现了。这是如何引起的,我该如何解决?

4

1 回答 1

1

如果在视图构建期间但仅在视图渲染期间不可用(例如,因为它被定义为) <c:if>,则此构造中的will 失败。在这里完全流离失所。它属于一个。从技术上讲,您应该在. 或者,您应该将第一个替换为a并将整个内容包裹在. 但是,如果在视图构建期间不可用,那仍然会失败。#{hotel}<p:dataTable var><c:otherwise><c:choose><c:when><c:if>test<c:if><c:when><c:choose>#{hotel}

只需使用 JSF 组件的rendered属性。

<p:commandButton ... rendered="#{roomServiceManagerBean.holdinghotelvilla.contains(hotel.hotelvillaId)}">
    ...
</p:commandButton>
<p:commandButton ... rendered="#{not roomServiceManagerBean.holdinghotelvilla.contains(hotel.hotelvillaId)}">
    ...
</p:commandButton>

也可以看看:

于 2013-09-24T23:52:16.113 回答