компонент рендеринга на основе selectOneMenu onchange - PullRequest
1 голос
/ 05 января 2012

Может быть, кто-то может прояснить это для меня.У меня есть h: selectOneMenu, который должен что-то сделать, как только пользователь выберет что-то из списка, а затем повторно отобразить ссылку на основе результатов.

<h:selectOneMenu value="#{backingBean.itemSelected}"  valueChangeListener="#{backingBean.methodThatDoesStuff}" onchange="submit()" >
    <s:selectItems var="_items" value="#{backingBean.itemList}"
                    label="#{_items.Name}"  /> 
    <s:convertEntity />
</h:selectOneMenu>

Я предполагал, что когда пользователь выбирает элементзаполнил бы поле в компоненте поддержки и затем запустил methodThatDoesStuff.Но этого не происходит.backingBean.itemSelected не устанавливается, пока ПОСЛЕ вызова метода.Я могу получить событие и использовать его непосредственно в методе:

public void methodThatDoesStuff(ValueChangeEvent event){
        Item item = (Item)event.getNewValue();
            .... do stuff, set a flag to display link later
    }

Это работает.

Но это оставляет мой aComponent установленным на предыдущее значение, поэтому в первый раз он будет нулевым, затем изменит настройки, основываясь на последнем выбранном элементе (так что я всегда позади:

public void methodThatDoesStuff(){

            Item item = this.itemSelected;  
                .... do stuff, set a flag to display link later
        }

Я пробовал:

<h:selectOneMenu value="#{backingBean.itemSelected}" >
<s:selectItems var="_items" value="#{backingBean.itemList}" label="#{_items.Name}"  /> 
<a:support event="onchange" ajaxSingle="true" reRender="aComponent" action="#{backingBean.methodThatDoesStuff}" />
<s:convertEntity />
</h:selectOneMenu>

Но это не работает,Я использую ValueChangeEvent или нет. Является ли использование объекта события единственным способом получить выбранный в данный момент элемент? Это JSF 1.2 и Seam 2

1 Ответ

0 голосов
/ 10 октября 2012

Установить атрибут immediate="true" на вашем selectOneMenu.

...