Обнаружение изменения значения в <h: selectOneMenu> внутри <tr: table>
Вот такая таблица:
<h:panelGroup rendered="#{ImportFromCSVFile.step2Visible}">
<div style="width: 100%; overflow: auto; max-height: 400px;">
<tr:table id="step2ColumnMappings" var="columnMappingEntry" rows="0" rowBandingInterval="1" value="#{ImportFromCSVFile.columnMappings}">
<tr:column>
<tr:outputLabel value="#{columnMappingEntry.columnIndex}"/>
</tr:column>
<tr:column>
<tr:outputLabel value="#{columnMappingEntry.columnValue}"/>
</tr:column>
<tr:column>
<h:selectOneMenu value="#{columnMappingEntry.columnType}" validator="#{ImportFromCSVFile.validateColumnType}" onchange="submit()" valueChangeListener="#{ImportFromCSVFile.columnMappingChanged}">
<f:selectItems value="#{ImportFromCSVFile.columnsToBeMapped}" />
</h:selectOneMenu>
</tr:column>
</tr:table>
</div>
</h:panelGroup>
который отображает (правильно) в виде таблицы с тремя столбцами: текст в первых двух и выпадающие в последнем. выпадающие списки также правильно инициализируются на основе значений в модели.
Что мне нужно сделать, так это уметь запускать логику каждый раз, когда изменяется значение в любом из выпадающих списков. Я думал об использовании valueChangeListener
на selectOneMenu
, как вы можете видеть в коде, но он не вызывается. Единственное, что приходит на ум сейчас - это работа с параметрами POST при отправке формы, что не будет оптимальным.
Ты знаешь, как я могу получить valueChangeListener
работать в этом контексте? JSF 1.2. Возможно, мне не хватает очевидного или известного решения, но, к сожалению, у меня очень мало предыдущего опыта работы с JSF и я не работаю с ним на регулярной основе.
Заранее большое спасибо!
xmlns:h="http://java.sun.com/jsf/html"
xmlns:tr="http://myfaces.apache.org/trinidad"
2 ответа
Вызов функции javascript, подобный тому, который вы упомянули во фрагменте кода, не отправит вашу форму.
valuechange
слушатель, вам нужно отправить запрос к компоненту поддержки, который проверит логику вашего уровня приложения. Вы можете попробовать удалить
по щелчку
атрибут, а также, пожалуйста, поместите сообщение, как вы разместили
валидатор
, Иногда бывает так, что, когда проверка не удалась, и вы не прикрепили соответствующее сообщение или уведомление для того же самого, требуемое действие не будет выполнено. Так что, хотя ваша логика может быть записана, но жизненный цикл JSF прерывается на
этап проверки
и ваше оставшееся действие не вызывается.