JSF и ajax: слушатель динамически добавляемого компонента никогда не переставал работать - PullRequest
0 голосов
/ 05 апреля 2011

У меня проблема с приложением JSF. На странице есть форма, где пользователь может динамически добавлять компоненты к той же самой форме. Когда я использую слушатель ajax для добавления компонента, он обновляется в виде, а также в модели. Но когда я пытаюсь удалить добавленный динамический компонент, нажав h: actionLink, его слушатель ajax никогда не запускается.

Это мой код:

<h:form rendered="#{schrijvenController.verslagenController.documentSelected}">
                <p>
                    <span class="noLabel">
                        #{bundle.JongereJongere}:
                    </span>

                    <h:selectOneMenu id="jongereSelect" valueChangeListener="#{schrijvenController.selecteerJongere}" immediate="true"
                                     value="#{schrijvenController.currentJongere.jongereID}"
                                     title="--#{bundle.JongereSelect}--">
                        <f:selectItems value="#{jongereController.jongerenAsSelectItems}"/>
                    </h:selectOneMenu>
                </p>
                <h:panelGroup id="personen">
                    <ui:repeat value="#{schrijvenController.verslagenController.persoonItems}" var="persoon">                            
                        <div class="div_add_persoon">
                            <div class="div_add_persoon_left">
                                <span class="noLabel"> #{persoon.aanwezigheid}:</span>

                                <h:inputText value="#{persoon.searchTerm}"
                                             onkeypress="if (event.keyCode == 13) { onchange(); return false; }">
                                    <f:ajax event="keypress" render="persoonLijst" listener="#{persoon.getPersonenWhereNameLikeSelectItems}" />
                                </h:inputText> &nbsp;
                                <h:selectOneMenu id="persoonLijst" styleClass="fixedWitdhDropDown"
                                                 value="#{persoon.currentPersoon.persoon_id}"
                                                 title="--#{bundle.PersoonSelect}--">
                                    <f:selectItems value="#{persoon.personenWhereNameLikeSelectItems}"/>
                                    <f:ajax event="change" render="@form" listener="#{persoon.add}" />
                                </h:selectOneMenu>
                            </div>
                            <h:panelGroup layout="block" styleClass="div_add_persoon_right">
                                <ui:repeat value="#{persoon.personen}" var="persoonPersoon">
                                    <h:panelGroup layout="block" styleClass="div_schrijvenPersoon">
                                    <h:outputText value=" #{persoonPersoon.naam} #{persoonPersoon.voornaam} " />
                                    <h:commandLink value="X" id="linkske">
                                        <f:ajax event="click" render="@form" listener="#{persoon.delete}" />
                                    </h:commandLink>
                                    </h:panelGroup>
                                </ui:repeat>
                            </h:panelGroup>
                        </div> 
                    </ui:repeat>
                    <div class="clear" />

Это Prt Sc моего взгляда: http://i206.photobucket.com/albums/bb69/bartloterman/pscreen.jpg?t=1302028364

Если щелкнуть элемент из списка, он добавляется справа внутри элемента div вместе с commandLink с текстом «x». Но когда я нажимаю на ссылку «x», ничего не происходит (никакая функция не выполняется). Это как если бы представление не может найти компонент. Я использую датамодели.

Я весь день искал решение в сети, но не смог найти. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 18 апреля 2011

Мне удалось решить эту проблему с помощью следующего кода на мой взгляд

<h:commandLink value="X">
      <f:ajax render="@form" execute="@form" listener="#{persoon.delete}" />
</h:commandLink>

Кажется, мне нужно сделать render = "@ form" и выполнить = "@ form"

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