【问题标题】:Primefaces - ui:repeat component does not updatePrimefaces - ui:repeat 组件不更新
【发布时间】:2013-06-20 21:43:59
【问题描述】:

我在 ajax 更新 ui:repeat 时遇到问题。更新是从 ui:repeat 外部的命令按钮触发的(请参见下面的代码)。需要变量 priceHour 来计算其他价格(周、Monat..)

<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:repeat 和价格没有更新。怎么了?
我也试过 update"myForm:alvs", update":myForm:alvs":没有!
我正在使用 primefaces 3.5
提前致谢

【问题讨论】:

  • 我不认为你可以更新ui:repeat本身,你可以更新h:form
  • 这正是我想要避免的,因为在同一个h:form 中还有很多其他组件和输入域。
  • 所以只需将其包裹在 h:panelGroup...

标签: ajax primefaces


【解决方案1】:

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

您需要将ui:repeat 包装在一个组件中,例如h:panelGroup,例如:

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

并更新按钮中的面板组:

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

请注意,我已删除 :hour,因为您无法指定它,每次重复的每个 ID 都会不同。

更多信息:

【讨论】:

  • ui:repeat 确实有一个 id 属性!可以在 Html 代码中看到它。无论如何,你的方法是有效的。谢谢。
  • @codyLine 你可以试试&lt;ui:repeat ...&gt;&lt;span&gt;test&lt;/span&gt;&lt;/ui:repeat&gt;,除了多个span,你什么都看不到:)
【解决方案2】:

我遇到了同样的问题。建议的答案对我不起作用:无论我做什么, ui:repeat 都不想被 ajax 更新。我改用 PrimeFaces 数据列表,它就像一个魅力。

http://www.primefaces.org/showcase/ui/data/dataList.xhtml

【讨论】:

    【解决方案3】:

    恐怕我不知道它不起作用的原因,我讨厌这种事情发生在我与 JSF 一起工作时。在我的解决方法中,您可以尝试用p:outputPanel 包围ui:repeat,然后更新该面板。

    【讨论】:

    • p:outputPanel 有点矫枉过正,因为它会输出一堆 HTML/CSS。
    • 我不能再process priceHour 组件了!我试过@this@this,myForm:panel:alvs:hour@this,panel:alvs:hour@this,alvs:hour什么都没有!
    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2012-07-26
    • 2016-09-27
    相关资源
    最近更新 更多