Я использую JSF 2 вместе с первичными, у меня есть selectOneButton, у которого есть 2 значения, EN/FR, я хочу получать уведомления каждый раз, когда язык изменяется, а затем изменить локаль на странице я установил valueChangeListener и событие ajax, , но каждый раз, когда прослушиватель изменений запускается, новое значение всегда равно нулю! здесь код XHTML:selectOneButton change listener всегда возвращает нуль
<h:form id="f">
<p:selectOneButton id="lang" value="#{currentUser.language}" valueChangeListener="#{currentUser.languageChanged}" >
<f:selectItem itemLabel="English" itemValue="en" />
<f:selectItem itemLabel="Françcais" itemValue="fr" />
<f:ajax event="change"/>
</p:selectOneButton>
</h:form>
метод languageChanged для тестирования:
public void languageChanged(ValueChangeEvent event) {
System.out.println("new val: " + event.getNewValue());
System.out.println("old val: " + event.getOldValue());
}
я даже пытался прикрепить к Аяксу слушателя:
<f:ajax event="change" listener="#{currentUser.languageChanged}"/>
и метод:
public void languageChanged(AjaxBehaviorEvent event) {
SelectOneButton button = (SelectOneButton)event.getComponent();
System.out.println(button.getValue()) ;
}
Это неправильный способ получить новое выбранное значение из p: selectOneButton с ajax?
UPDATE: Так я знаю, что является причиной этой проблемы на самом деле мой selectOneButton
находится внутри menuItem
, который находится внутри splitButton
, когда я беру selectOneButton из СТОРОНА splitButton он отлично работает! Почему тот факт, что selectOneButton
находится внутри menuItem
, препятствует его отправке на сервер? вот код:
<h:panelGroup style="float: right;" >
<h:form id="f">
<p:splitButton value="#{currentUser.fullName}" icon="ui-icon-person" styleClass="toTheRight" style="min-width: 200px;" >
<p:menuitem value="Matricule: #{currentUser.matricule}" />
<p:menuitem value="#{msgs.role}: #{currentUser.role}" />
<p:separator />
<p:menuitem>
<p:selectOneButton id="lang" value="#{currentUser.language}" valueChangeListener="#{currentUser.languageChanged}" >
<f:selectItem itemLabel="English" itemValue="en" />
<f:selectItem itemLabel="Françcais" itemValue="fr" />
<f:ajax event="change"/>
</p:selectOneButton>
</p:menuitem>
<p:separator />
<p:menuitem value="#{msgs.settings}" icon="ui-icon-wrench" />
<p:menuitem value="#{msgs.logout}" icon="ui-icon-arrowthickstop-1-w" url="/j_spring_security_logout"/>
</p:splitButton>
</h:form>
</h:panelGroup>
Это может также зависеть от Jsf фазы, в которой называется valueChangeListener. 'getLocalValue()' может работать. Попытайтесь, я никогда не использовал их. – Kukeltje
, но локаль никогда не устанавливается в первую очередь? –
Locale? И если вы попытаетесь извлечь его из 'submittedValue()'? – Kukeltje