1

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 保存该值,并且可行,但我想这不是一个简洁的解决方案。

4

2 回答 2

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;
}
于 2012-03-12T12:56:32.610 回答
1

不设置可以试试吗

 immediate="true"

JSF commandButton with immediate="true"

于 2012-03-12T11:44:01.193 回答