我在使用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保存值,这是有效的,但我想这不是一个简洁的解决方案。
答案 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)