2013-06-20 2 views
2

У меня есть проблема с обновлением ajax a ui: repeat. Обновление запускается из командной строки за пределами ui: repeat (см. Код ниже). Переменная priceHour требуется для расчета цены на другую (неделю, Monat ..)Основные элементы - 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 > 

При нажатии кнопки ничего не происходит и пользовательский интерфейс: повторить и цены не обновляются. Что не так?
Я также попробовал обновление "myForm: alvs", обновление ": myForm: alvs": ничего!
Я использую primefaces 3.5
Заранее спасибо

+0

Я не думаю, что вы можете обновить 'Ui: repeat' себя, вы можете обновить' час: 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, так как вы не можете его видеть, каждый идентификатор будет отличаться для каждого повтора.

Подробнее:

+1

'ui: repeat' имеет атрибут id! Его можно увидеть в HTML-коде. Во всяком случае, ваш подход работает. Спасибо. – codyLine

+0

@codyLine Вы можете попробовать ' test' и вы не увидите ничего, кроме нескольких 'span' :) –

+0

Это сработало для меня. –

0

Я боюсь, что я не знаю причину для того, чтобы не работать, я ненавижу, когда такого рода вещи происходит со мной работать с JSF. Как я обход, вы можете попробовать окружить ui:repeatp:outputPanel, а затем обновить эту панель.

+0

« p: outputPanel »немного перебор, так как он выведет кучу HTML/CSS. –

+0

Я больше не могу обработать компонент 'priceHour'! Я попробовал '@ this',' @ this, myForm: panel: alvs: hour', '@ this, panel: alvs: hour' и' @ this, alvs: hour' ничего! – codyLine

2

У меня была такая же проблема. Предлагаемые ответы не помогли мне: ui: repeat не хочет обновляться ajax, что бы я ни делал. Вместо этого я использовал список данных PrimeFaces, и он работал как шарм.

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