0

ドロップダウン (STREET、PO BOX) で選択された内容に基づいて、別の複合コンポーネント streetAddressUpdate または postalBoxAddressUpdate をレンダリングするこの複合コンポーネントがあります。ここにコードがあります

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:cc="http://java.sun.com/jsf/composite"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:tad="http://java.sun.com/jsf/composite/tmr/ad"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:tmi="http://java.sun.com/jsf/composite/tmr/mi">

<!-- INTERFACE -->
<cc:interface>
    <cc:attribute
        name="title"
        default="Postal address" />
    <cc:attribute
        name="postalAddress"
        type="qdtmr.comp.cbui.address.fieldmodel.PostalAddress"
        default="#{addressUpdate.postalAddress}"
        required="true" />
 </cc:interface>
<cc:implementation>
<ol class="questions">

    <!-- Postal address type -->
    <li><h:outputLabel for="postalAddressType">
            <span class="label">#{tcum.postalAddressType}</span>
        </h:outputLabel> <p:selectOneMenu
            id="postalAddressType"
            value="#{cc.attrs.postalAddress.postalAddressType}"
            valueChangeListener="#{addressUpdate.changePostalAddress}">
            <f:selectItems value="#{addressController.postalAddressTypesList}" />
            <p:ajax
                update=":#{cc.clientId}:postalAddressPanel, :#{cc.clientId}:poBoxPanel" />
        </p:selectOneMenu></li>

    <p:outputPanel id="postalAddressPanel">
        <ui:fragment rendered="#{cc.attrs.postalAddress.postalAddressType == 'STREET'}">
            <tad:streetAddressUpdate
                streetAddress="#{cc.attrs.postalAddress.postalStreetAddress}"
                title="" />
        </ui:fragment>
    <p:outputPanel id="poBoxPanel">
        <ui:fragment rendered="#{cc.attrs.postalAddress.postalAddressType == 'POBOX'}">
            <tad:postalBoxAddressUpdate
                postalBoxAddress="#{cc.attrs.postalAddress.postalBoxAddress}" />
        </ui:fragment>
    </p:outputPanel>
</ol>
</cc:implementation>
</html>

私を混乱させているのは、ui:fragment タグを取り除くと、ページ上の値が postalStreetAddress/postalBoxAddress モデル Bean に戻ることですが、ui:fragment が含まれていると値が終わらないことです。 postalStreetAddress/postalBoxAddress にします。

私が ui:fragment を持っている理由は、postalAdressType に応じて、postalBoxAddressUpdate 複合コンポーネントが使用されるか、postalStreetAddressUpdate コンポーネントが使用されるためです。

どんな助けでも大歓迎です。私はそれが ui:fragment だと思う

編集: ui:fragment の取り出しを確認しましたが、それが原因のようです。何が起こっているのか本当に理解したい

4

0 に答える 0