<h:selectonemenu>不会在bean上保存选定的值</h:selectonemenu>

时间:2012-03-12 11:31:45

标签: jsf-2 selectonemenu

我在使用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”列表中选择一个值并提交表单时,bean“sistema.indEstado”不会改变。我已经看到bean属性在方法modificaSistema之前发生了变化,但在这个方法中(我有一个数据库连接和一个sql语句),“sistema.indEstado”返回其原始值。为什么会这样?我试图使用valueChangeListener保存值,这是有效的,但我想这不是一个简洁的解决方案。

2 个答案:

答案 0 :(得分:2)

当你在getter方法中而不是在bean类的(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 :(得分:1)

你可以尝试不设置

 immediate="true"

JSF commandButton with immediate="true"