我有这个复合组件,它基于在下拉列表中选择的内容(街道、邮政信箱)呈现另一个复合组件 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 ,它似乎是罪魁祸首。我真的很想了解发生了什么