복합 구성 요소에 문제가 있습니다.업데이트 가능한 복합 구성 요소?
이 구성 요소는 인터페이스 선언의 componentType 속성을 사용하여 구성 요소 (및 해당 속성)를 백업 빈에 바인딩합니다.
복합 컴포넌트 속성이 업데이트되지 않는 한 작동합니다.
로그를 자세히 보면 뒷받침 빈 속성은 항상 속성의 초기 값으로 업데이트됩니다.
내 XHTML의 구성 요소는 다음과 같습니다
@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 :
<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>
백킹 빈은 같은 선언
public class TimelineBase extends UIComponentBase implements Serializable,NamingContainer {
...
}
나는 또한 UINamingContainer, UIComponent 등에서 도출하려고했습니다.
"AugmentedSen"유형은 직렬화가 가능하며 다른 많은 장소에서 사용됩니다.
복합 구성 요소는 몇 가지 매개 변수로 엘 식으로 호출됩니다
<sen:timelineMandatsSenateurs augmentedSen="#{selectionContext.selectedSen}" timelineWidth="700" forceMinMax="true"/>
내가 제대로 설정 속성 로그에 볼 수 있지만 결코 설정되지 값이 엘 식의 결과에 따라 변경 있음 평가. selectedSen의 값은 사용자가 다른 구성 요소의 항목을 선택할 때 변경됩니다.
인터페이스 선언의 componentType 특성을 제거하고 cc.attrs.augmentedSen 값을 출력하면 올바르게 업데이트된다는 점이 놀랍습니다. Backing Bean의 인스턴스가 하나만 존재한다는 것을 이해할 수 있습니다. 하지만 속성이 제대로 업데이트되지 않는 이유는 무엇입니까?
나는 (<sen:timelineMandatsSenateurs id="tl_#{selectionContext.selectedSen.sen.senmat}" augmentedSen="#{selectionContext.selectedSen}" timelineWidth="700" forceMinMax="true"/>
같은 것을) 복합 구성 요소 인스턴스를 파라 메트릭 ID를 제공함으로써 chead하려고 노력했다.
필자는 또한 그것을 primefaces p : outputPanel in dynamic = "true"로 캡슐화하고, 매개 변수가 null이 아닌 경우에만 렌더링되지만 아무 것도 변경하지 않습니다. 매개 변수로 전달 된 EL 표현식이 재평가되고 속성이 제대로 업데이트되도록
<p:outputPanel id="graph" dynamic="true" rendered="#{not empty selectionContext.selectedSen}">
<sen:timelineMandatsSenateurs augmentedSen="#{selectionContext.selectedSen}" timelineWidth="700" forceMinMax="true"/>
</p:outputPanel>
그래서 어떻게 넣을 수 있습니까?
미리 감사드립니다.
내가 사용하고 있습니다 :
- 바람둥이 6.0.33
- 에서 MyFaces 2.1.7
- PrimeFaces 3.2
- CODI 1.0.5 OWB 1.1.3