<h: selectOneMenu> не сохраняет в бине выбранное значение - PullRequest
1 голос
/ 12 марта 2012

У меня проблемы с SelectOneMenu. Я пишу это:

<h:selectOneMenu id="listaEstados"
        styleClass="comboboxStyle" 
        value="#{detalleSistemaBean.sistema.indEstado}" 
        immediate="true">
    <f:selectItems value="#{detalleSistemaBean.indEstados}" />
</h:selectOneMenu>
<h:commandButton id ="SubmitModificar"
    value="Modificar"
    styleClass="botonPeque"
    action="#{detalleSistemaBean.modificaSistema}">
</h:commandButton>  

Но когда я выбираю одно значение из списка "indEstados" и отправляю форму, компонент "sistema.indEstado" не изменяется. Я видел, что свойство bean-компонента изменяется непосредственно перед методом modificaSistema, но внутри этого метода (где у меня есть соединение с базой данных и предложение sql), «sistema.indEstado» возвращает свое первоначальное значение. Почему это происходит? Я пытался сохранить значение с помощью valueChangeListener, и это работает, но я думаю, что это не изящное решение.

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Это может произойти, когда вы выполняете загрузку данных внутри метода get, а не внутри конструктора (post) класса bean.

Исправьте код управляемого бина, чтобы в методах getter ничего не делалось, кроме простого возврата свойства.

т.е. не делай

public Sistema getSistema() {
    return sistemaService.find(someSistemaId);
}

а точнее

private Sistema sistema;

@PostConstruct
public void init() {
    sistema = sistemaService.find(someSistemaId);
}

public Sistema getSistema() {
    return sistema;
}
1 голос
/ 12 марта 2012

Можете ли вы попробовать без установки

 immediate="true"

JSF commandButton с немедленным = "true"

...