使用自定义组件时,我遇到了一个非常奇怪的问题。
这是我的主要 xhtml:
<html>
<ui:repeat value="#{list}" var="item">
<h:form>
<custom:component myCode="#{item.code}"
intervals="#{myBean.intervals(item.code)}"
selectedInterval="#{myBean.selectedInterval[item.code]}"
controller="#{myController}/>
</h:form>
</ui:repeat>
</html>
这是组件 xhtml:
<html>
<cc:interface componentType="custom.myComponent">
<cc:attribute name="myCode" required="true"/>
<cc:attribute name="intervals" required="true"/>
<cc:attribute name="selectedInterval" required="true"/>
<cc:attribute name="controller" required="true"/>
</cc:interface>
<p:selectOneRadio id="selected-interval"
value="#{cc.attrs.selectedInterval}">
<f:selectItems value="#{cc.attrs.intervals}"
var="interval"
itemLabel="#{interval.name}"
itemValue="#{interval}"/>
<p:ajax event="change"
process="@this"
global="false"
update="@form"/>
</p:selectOneRadio>
<k:calendarHeader
id="calendar-interval"
dayVarStatus="dayVar"
groupRows="false">
<f:facet name="day">
<h:outputText value="#{dayVar.date}">
<f:convertDateTime pattern="d"/>
</h:outputText>
</f:facet>
<p:ajax event="change"
listener="#{cc.attrs.controller.processChanges(cc.attrs.myCode)}"
update="@this"
global="false"
process="@this"/>
</k:calendarHeader>
</html>
<k:calendarHeader>
也是我们的自定义组件,但它已经在几个不同的场景中工作多年,所以我不认为问题就在那里。它基本上只映射change
事件:
<composite:clientBehavior name="change" event="change" targets="calendarHeader"/>
我遇到的问题是,如果processChanges
功能在手动选择单选按钮之前被称为,则它始终具有最后 ui的myCode
值:重复。
让我们说我的代码列表有3个值:200,300,400。始终使用400调用processChanges。但是,如果我选择一个单选按钮,则刷新表单,然后代码正确。
单选按钮的初始化是正确完成的,只是看起来&#34;存储&#34;刷新前myCode
的值不正确。
我不理解这种行为,因为我在其他区域有其他<p:ajax>
来电,就像<ui:repeat>
中的魅力一样。
如果有人知道错误在哪里,我会非常感激,即使我知道有很多代码没有在这里显示,因此很难看到错误。