ui: repeat - добавление / удаление элементов из списка не работает должным образом - PullRequest
1 голос
/ 11 декабря 2011

В моем файле .xhtml есть следующий код

<h:form id="registration3Form">
<h:panelGroup id="terms_outer_panel">
   <h:commandLink styleClass="item-7" 
                    action="#{registerBusinessWizardController.addCourse}" 
                    value="#{msgBundle['registerThirdPage.panel.addSchedule']}">
   </h:commandLink>
   <ui:repeat value="#{registerBusinessWizardController.courses}" var="course">      
                    <h:panelGroup id="terms_inner_panel">
                        <div class="term">

                            <h:inputText id="price" styleClass="item-2" value="#{course.price}" />

                            <h:inputText  id="dateFrom" styleClass="date" value="#{course.date}" >
                                <f:convertDateTime  pattern="yy-MM-dd" type="date" dateStyle="long"/>
                            </h:inputText>

                            <h:inputTextarea value="#{course.additionalInfo}"/>

                            <p class="more">
                                <h:commandLink 
                                    value="#{msgBundle['registerThirdPage.panel.deleteSchedule']}" 
                                    actionListener="#{registerBusinessWizardController.removeCourse}">
                                    <f:ajax render=":registration3Form:terms_outer_panel" execute="terms_inner_panel"/>
                                </h:commandLink>

                            </p>
                        </div>
                    </h:panelGroup>
        </ui:repeat>
    //some other stuff
</h:panelGroup>
</h:form>

И когда страница отображается. И пользователь нажимает ссылку addSchedule. Я ожидаю, что повторение пользовательского интерфейса добавит новый div class = "term" с пустыми значениями привязываются к входам, потому что:

public void addCourse(){
    Course course = new Course();
    courses.add(course);
}

Я добавляю новый объект Course с нулевой ценой AdditionalInfo и датой в список, используемый пользовательским интерфейсом: repeat.

Вместо этого я получаю новый

<div class="term"> 

часть со значениями, скопированными из предыдущей записи.

Когда я удаляю элемент из списка (в managedBean удаляется соответствующий объект из списка), я вижу данные из только что удаленного объекта: /

Кто-нибудь сталкивался с такой проблемой? Есть ли у вас какие-либо рекомендации?

1 Ответ

4 голосов
/ 12 декабря 2011

Кажется, это еще одна ошибка <ui:repeat><ui:repeat> Мохарры слишком много проблем.Первый шаг - исключить подозрительный компонент, заменив его полноценным компонентом UIData, таким как <h:dataTable>.Если это работает, то это определенно ошибка в <ui:repeat>, в противном случае это просто ошибка в вашем собственном коде (основываясь на приведенном коде, пока я его не вижу, однако я предполагаю, что ваш бин @ViewScoped),

Если это действительно вызвано самой <ui:repeat>, то первым шагом обычно является обновление до последней версии Mojarra.Это в настоящее время 2.0.6 для контейнеров Servlet 2.5 и 2.1.4 для контейнеров Servlet 3.0.Если это не решит проблему, вам следует заменить Mojarra на MyFaces , которая имеет другую и лучшую реализацию <ui:repeat>.Если по какой-то причине это не вариант, вам следует рассмотреть возможность поиска сторонней библиотеки компонентов, в которой есть компонент на основе UIData, который не отображает никакой разметки, например Tomahawk's <t:dataList>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...