我有一個複合組件的問題。可更新複合組件?
此組件使用接口聲明的componentType屬性將組件(及其屬性)綁定到輔助bean。
只要不更新複合組件屬性,它就可以工作。
當我仔細查看日誌時,似乎backing bean屬性總是用屬性的初始值更新。
我XHTML組件的樣子:
<composite:interface componentType="timelineMandats">
<composite:attribute name="augmentedSen" type="fr.senat.beans.AugmentedSen" required="true"/>
<composite:attribute name="timelineWidth" required="false" default="800"/>
<composite:attribute name="dateMin" required="false" type="java.util.Date"/>
<composite:attribute name="dateMax" required="false" type="java.util.Date"/>
<composite:attribute name="highlightDate" required="false" type="java.util.Date"/>
<composite:attribute name="forceMinMax" required="false" default="false"/>
</composite:interface>
<composite:implementation>
<p:outputPanel>
<p:scrollPanel style="width:820px; height:200px;text-align:center;">
<p:graphicImage id="imgTimeline" value="#{cc.timelineSenatoriaux}"/>
</p:scrollPanel>
<p:panelGrid columns="4">
<h:outputText value="Intervalle :"/>
<p:calendar value="#{cc.dateMin}" pattern="dd/MM/yyyy" mode="popup" showOn="button">
<p:ajax event="dateSelect" update="imgTimeline"/>
<p:ajax event="change" update="imgTimeline"/>
</p:calendar>
<p:calendar value="#{cc.dateMax}" pattern="dd/MM/yyyy" mode="popup" showOn="button">
<p:ajax event="dateSelect" update="imgTimeline"/>
<p:ajax event="change" update="imgTimeline"/>
</p:calendar>
<p:commandButton value="Mettre à jour" update="imgTimeline"/>
</p:panelGrid>
</p:outputPanel>
</composite:implementation>
的支持bean可以聲明如下:
@FacesComponent("timelineMandats")
public class TimelineMandats extends TimelineBase {
AugmentedSen asen;
public AugmentedSen getAugmentedSen() { return asen; }
public void setAugmentedSen(AugmentedSen asen) { this.asen = asen; }
// other accessors and stuff
}
其基類UIComponentBase派生和擴展NamingContainer:
public class TimelineBase extends UIComponentBase implements Serializable,NamingContainer {
...
}
我也試圖從UINamingContainer,UIComponent等派生出來。
「AugmentedSen」類型是可序列化的,並在許多其他地方使用。
的複合元件被稱爲與EL表達式爲一些參數:
<sen:timelineMandatsSenateurs augmentedSen="#{selectionContext.selectedSen}" timelineWidth="700" forceMinMax="true"/>
我可以在屬性設置是否正確的日誌中看到,但從來沒有設置的值與EL表達式的結果改變沿評價。 selectedSen的值隨用戶選擇另一個組件中的項目而變化。
令我驚訝的是,如果我刪除接口聲明的componentType屬性並輸出cc.attrs.augmentedSen值,則會正確更新它。我可以理解,只有一個支持bean實例存在。但爲什麼這些屬性沒有正確更新?
我試圖通過賦予複合材料組件實例的參數ID(類似
<sen:timelineMandatsSenateurs id="tl_#{selectionContext.selectedSen.sen.senmat}" augmentedSen="#{selectionContext.selectedSen}" timelineWidth="700" forceMinMax="true"/>
)到chead。
我也將它封裝在一個帶有dynamic =「true」的primefaces p:outputPanel中,只在參數不爲null時呈現,但這不會改變任何內容。
<p:outputPanel id="graph" dynamic="true" rendered="#{not empty selectionContext.selectedSen}">
<sen:timelineMandatsSenateurs augmentedSen="#{selectionContext.selectedSen}" timelineWidth="700" forceMinMax="true"/>
</p:outputPanel>
那麼我怎樣才能把它作爲參數傳遞的EL表達式重新評估和屬性正確更新?
非常感謝提前。
我使用:
- 的Tomcat 6.0.33
- MyFaces的2.1.7
- PrimeFaces 3.2
- CODI 1.0.5
- OWB 1.1。3