2013-06-20 50 views
2

我有一个问题,以更新一个ui:ajax重复。该更新是由ui:repeat之外的commandButton触发的(请参阅下面的代码)。可变 priceHour需要计算其他价格(周,Monat ..)Primefaces - ui:重复组件不会更新

<h:form id="myForm"> 
<ui:repeat id="alvs" var="alv" value="#{myBean.allV}" > 
    <h:panelGroup rendered="#{alv.status == 'ON'}" > 
    <div class="pricing"> 

     <h:outputText styleClass="bold" value="#{alv.shortName}: "/> 

     <p:inputText value="#{alv.priceHour}" id="hour" required="true" >     
     <f:convertNumber pattern="#.##" type="currency" /> 
     </p:inputText> 

     <p:inputText value="#{alv.priceDay}" id="day" >     
     <f:convertNumber pattern="#.##" type="currency" /> 
     </p:inputText> 

     <p:inputText value="#{alv.priceWeek}" id="week" >     
     <f:convertNumber pattern="#.##" type="currency" /> 
     </p:inputText> 

     <p:inputText value="#{alv.priceMonth}" id="month" >     
     <f:convertNumber pattern="#.##" type="currency" /> 
     </p:inputText> 

    </div> 
    </h:panelGroup> 

    <p:messages /> 

    </ui:repeat> 

<p:commandButton value="Calculator" actionListener="#{myBean.priceCalc}" process="@this,alvs:hour" update="alvs" /> 

</h:form > 

当我按一下按钮没有任何反应和UI:重复,而不是更新的价格。哪里不对?
我也试过更新“myForm:alvs”更新“:myForm:alvs”:什么都没有!
我使用primefaces 3.5
预先感谢

+0

我不认为你可以更新'UI:repeat'本身,你可以更新'H:form'代替。 –

+0

这正是我想避免的,因为在同一个'h:form'里面有很多其他的组件和inpufields。 – codyLine

+0

所以只需将它包装在'h:panelGroup'中... –

回答

10

ui:repeat不是渲染组件,所以你不会在HTML中看到任何关于它的东西。您无法更新未呈现的内容。此外ui:repeat甚至没有id属性。

你需要用你的ui:repeat一个组件内,如h:panelGroup例如像这样:

<h:panelGroup id="alvs"> 
    <ui:repeat ...> 
    </ui:repeat> 
</h:panelGroup> 

而在你的按钮更新panelGroup中:

<p:commandButton value="Calculator" actionListener="#{myBean.priceCalc}" process="@this,alvs" update="alvs" /> 

请注意,我已经删除了:hour,因为你无法专注,每个重复的每个ID都会有所不同。

更多信息:

+1

'ui:repeat'确实有一个id属性!人们可以在Html代码中看到它。无论如何,你的方法是有效的。谢谢。 – codyLine

+0

@codyLine你可以尝试'测试'你不会看到其他任何东西比'span' :) –

+0

这对我有效。 –

0

我怕我不知道原因,它不工作,我讨厌那种东西发生在我与JSF合作。在我解决问题时,您可以尝试使用p:outputPanel围绕ui:repeat,然后更新该面板。

+0

'p:outputPanel'有点矫枉过正,因为它会输出一堆HTML/CSS。 –

+0

我不能'处理'priceHour'组件!我试过'@ this','@ this,myForm:panel:alvs:hour','@ this,panel:alvs:hour'和'@ this,alvs:hour' nothing! – codyLine