3

リストに特定のアイテム ID が含まれているかどうかに応じて、2 つの異なるコマンド ボタンを切り替えようとしています。

               <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}

rendered代わりにJSF コンポーネントの属性を使用してください。

<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 に答える