Jsf 2 <;h:选择一个功能表>;不';t在bean上保存所选的值
我对SelectOneMenu有问题。我这样写:Jsf 2 <;h:选择一个功能表>;不';t在bean上保存所选的值,jsf-2,selectonemenu,Jsf 2,Selectonemenu,我对SelectOneMenu有问题。我这样写: <h:selectOneMenu id="listaEstados" styleClass="comboboxStyle" value="#{detalleSistemaBean.sistema.indEstado}" immediate="true"> <f:selectItems value="#{detalleSistemaBean.indEstados}" /&
<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>
但是当我从列表“indEstado”中选择一个值并提交表单时,bean“sistema.indEstado”并没有改变。我已经看到bean属性在方法modificaSistema之前发生了变化,但是在这个方法中(我有一个数据库连接和一个sql语句),“sistema.indEstado”返回到其原始值。为什么会发生这种情况?我曾尝试使用valueChangeListener保存该值,这是可行的,但我想这不是一个简单的解决方案。您可以尝试不进行设置吗
immediate="true"
当您在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;
}
谢谢你的评论,阿比。我已经试过了,但问题仍然存在。OP将该属性放在了输入组件上,而不是命令组件上。嗨,BalusC,我已经读过你关于JSF的相同文章。谢谢你的回答。嗯,我想做一个页面,在其中我可以进行修改并重写修改后的值。我已经尝试了您的解决方案,现在的问题是Bean atributes值没有出现在inputText中……显然,
@PostConstruct
方法没有被调用,或者给定示例中的find()
方法返回了null
。