Обновление значения AJAX компонента автозаполнения Richfaces 4 - PullRequest
2 голосов
/ 29 июня 2011

Попытка перенести проект Richfaces 3.3 на 4. Получил компонент rich: SuggestionBox и преобразовал его в компонент rich: autocomplete, но у него возникли серьезные проблемы.

Требования: заполните часть автозаполнения, она предоставляет пользователю подходящие варианты.Когда пользователь выбирает что-то из выпадающего списка, компонент должен обновить его значение, отключить себя, а также вычислить / обновить значение по умолчанию во вторичном поле, которое пользователь может редактировать.Пока у меня есть это:

<a4j:jsFunction name="jsFunc"
    execute="autoComplete"
    render="species_name individualUserStr"
    actionListener="#{individualsBean.selectedIndividualElem.assignDefaultNickname}"/>


<rich:autocomplete
autocompleteMethod="#{individualsBean.speciesForBox}"
mode="cachedAjax"
layout="table"
var="sp"
id="species_name"
value="#{individualsBean.selectedIndividualElem.userCommonName}"
fetchValue="#{sp.commonName}"
disabled="#{individualsBean.selectedIndividualElem.userCommonName != null
    and individualsBean.selectedIndividualElem.userCommonName ne ''}"
onselectitem="jsFunc()"

>
...
</rich:autocomplete>

<h:inputText value="#{individualsBean.selectedIndividualElem.ssi.individualUserStr}"
id="individualUserStr"
maxlength="28"
styleClass="inputTextMediumRF">
</h:inputText>

Прямо сейчас, когда пользователь выбирает то, что вызывается jsFunc, метод assignDefaultNickname вызывается, и все работает отлично, за исключением того факта, что вычисление в assignDefaultNickname используется для определенияЗначение вторичного поля IndividualUserStr зависит от значения видов_имя, но вид_имя не отправляется до тех пор, пока я не отправлю форму, поэтому вычисление, выполненное в assignDefaultNickname, является неправильным..selectedIndividualElem.userCommonName, перед вызовом assignDefaultNickname, но я не могу понять, как это сделать.Кажется, есть проблемы с AJAX и этой функцией автозаполнения;Это одна из причин, почему я должен использовать этот обходной компонент jsFunction, чтобы вообще вызвать метод.

Есть предложения о том, как решить эту проблему?

1 Ответ

1 голос
/ 12 июля 2011

Нашел решение моего собственного вопроса. В основном, нужно научиться использовать атрибут execute. Урок для любого другого JSF 2.0 n00bs - использовать execute для выборочной повторной обработки страницы. С помощью execute вы можете создать разделенный пробелами список идентификаторов компонентов, значения которых должны быть привязаны к компоненту поддержки, в случае, если их необходимо использовать в приемнике, отвечающем на событие AJAX. В моем случае это означало изменение тега jsFunction следующим образом:

<a4j:jsFunction name="jsFunc"
execute="species_name individualUserStr"
render="species_name individualUserStr"
actionListener="#{individualsBean.selectedIndividualElem.assignDefaultNickname}"/>

Как вы можете видеть, функция jsFunction теперь, когда она вызывает функцию assignDefaultNickname, сначала обновит значения, привязанные к компонентам auto-complete и inputText, а затем запустит assignDefaultNickname.

...