Доступ к JSF SelectItem.Label и Value из XHTML без selectOneMenu

Я борюсь с небольшой проблемой интернационализации в одном из моих приложений. История выглядит так:

У меня есть таблица данных, которая отображает записи, и selectOneMenu, чтобы выбрать столбец таблицы данных для фильтрации. В selectOne загружаются SelectItems, которые заполняются в соответствии с фактической локалью в компоненте поддержки во время обновления данных.

Теперь, когда пользователь меняет локаль, содержимое selectOne остается в старой локали до тех пор, пока страница не будет перерисована. Это вполне логично и ожидаемо.

Конечно, я хочу, чтобы это изменилось.

Поэтому я попытался написать собственный selectOne, который использует selectItems, которые содержат ссылки на записи languageFile, чтобы иметь возможность изменять их без повторного рендеринга.

Вот что я пробовал

<select id="j_id5:filterSelector" name="j_id5:filterSelector" size="1"> 
    <c:forEach var="item" items="#{gridBean.filterFields}">
        <option value="#{item.Value}">#{msg[item.Label]}</option>
    </c:forEach>
</select>

К сожалению, JSF сообщает мне, что у элемента нет свойства Label или Value, во что я с трудом верю. ;)

Кто-нибудь знает, как получить доступ к этим свойствам таким образом?


person KB22    schedule 14.08.2009    source источник


Ответы (3)


Мне кажется, вы должны написать:

#{item.value}

вместо #{item.Value}, поскольку стандартное соглашение JavaBeans должно иметь getXyz() геттер для свойства xyz.

Кроме того, почему бы вам не предоставить valueChangeListener компоненту пользовательского интерфейса для выбора локали, а затем внутри него заполнить метки элементов выбора для этой локали. Таким образом, вы можете использовать стандартный тег f:selectItems.

person javashlook    schedule 14.08.2009
comment
спасибо за ответ, теперь я могу получить доступ к свойствам. Боже мой. Я согласен, что лучше использовать valueChangeListener. Я не совсем уверен, как интегрировать его в свое приложение. На самом деле у меня есть LanguageSelectioBean, который отображает два флага, которые меняют локаль при щелчке через commandLinks. --› могут ли командные ссылки запускать событие valueChange? Во-вторых, моя таблица данных — это компонент, который я использую в нескольких местах своего приложения. Мне нужно расширить его, чтобы он прослушивал valueChanges и запрашивал языковые файлы onValueChange, верно? спасибо К - person KB22; 17.08.2009

Я решил проблему с сохранением полей фильтра дважды. Один раз для каждого языка - решение во время выполнения, которое рендерится. Не красиво, но работает. Не удалось запустить changeListener...

person KB22    schedule 18.08.2009

Вы также можете сделать так, чтобы ваши командные ссылки повторно отображали страницу, чтобы она автоматически делала то, что вам нужно. Не знаю, соответствует ли это вашим требованиям или нет. :)

person Drew    schedule 18.08.2009