在ui中调用的JSF2自定义组件属性:repeat始终访问最后一个值

时间:2016-10-17 12:38:46

标签: jsf jsf-2 custom-component uirepeat

使用自定义组件时,我遇到了一个非常奇怪的问题。

这是我的主要 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>中的魅力一样。

如果有人知道错误在哪里,我会非常感激,即使我知道有很多代码没有在这里显示,因此很难看到错误。

0 个答案:

没有答案