JSF 2 - Ajax Недвижимость не найдена - PullRequest
2 голосов
/ 17 февраля 2011

Я получил эту ошибку:

execute="#{localeManager.changeLocale}": Property 'changeLocale' not found on type xyz.com.i18n.LocaleManager

где LocaleManager:

@ManagedBean
@ViewScoped
public class LocaleManager implements Serializable
{
    // other codes here

    public static void changeLocale(AjaxBehaviorEvent event) {
       newLocale = (Locale) new Locale((String) event.toString());
       FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("selectedLocale", newLocale); 
    }
}

и я вызываю метод бина здесь:

<h:selectOneMenu id="selectLang" immediate="true" value="#{langListing.language}">
    <f:ajax event="change" execute="#{localeManager.changeLocale}" />
    <f:selectItems value="#{langListing.languages}" />
</h:selectOneMenu>

Я изучаю AJAX, экспериментируя с этим кодом. Но я не понимаю, как Ajax оценивает метод бина. Это простая проблема, которую нужно решить?

1 Ответ

1 голос
/ 17 февраля 2011

Согласно документации по тегу <f:ajax> атрибут execute должен ссылаться на набор идентификаторов клиентов, которые должны обрабатываться на стороне сервера. Это не должно относиться к какому-либо методу действия компонента. Исключение наступает, потому что ожидается метод getter , который возвращает коллекцию идентификаторов клиентов.

Вместо этого вы хотите использовать атрибут listener.

<f:ajax listener="#{localeManager.changeLocale}" />

Обратите внимание, что событие по умолчанию для h:selectOneMenu уже valueChange. Вы можете просто опустить это.

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