无法获取jsf中selectOneMenu的selectItems的id

无法获取jsf中selectOneMenu的selectItems的id,jsf,richfaces,Jsf,Richfaces,Id(personBean.idSelectedItem)始终返回null。虽然我可以选择并更改下拉列表的值,但Id仍然为空,不会相应更改。 请帮助我,下面是我的代码: <h:selectOneMenu value="#{personBean.idSelectedItem}" immediate="true" onchange="EnableDisable()"> <f:selectItems value="#{personBean.apptDuration}" />

Id(personBean.idSelectedItem)始终返回null。虽然我可以选择并更改下拉列表的值,但Id仍然为空,不会相应更改。 请帮助我,下面是我的代码:

<h:selectOneMenu value="#{personBean.idSelectedItem}" immediate="true"  onchange="EnableDisable()">
  <f:selectItems value="#{personBean.apptDuration}" />               
</h:selectOneMenu>

我的豆豆是:

private String idSelectedItem = null;
private List<SelectItem> apptDuration = null;
public String getIdSelectedItem() {
   System.out.println("getIdSelectedItem == " + idSelectedItem);
   return idSelectedItem;}

public void setIdSelectedItem(String idSelectedItem) {
    this.idSelectedItem = idSelectedItem;
    System.out.println("setIdSelectedItem == " + idSelectedItem);
}

public List<SelectItem> getApptDuration() {
  if (apptDuration == null) {
      apptDuration = new ArrayList<SelectItem>();
      apptDuration.add(new SelectItem("P1", "Day(s)"));
      apptDuration.add(new SelectItem("P2", "5 min"));
      apptDuration.add(new SelectItem("P3", "10 min"));
      apptDuration.add(new SelectItem("P4", "15 min"));
  }
  return apptDuration;
}

public void setApptDuration(List<SelectItem> apptDuration) {
    this.apptDuration = apptDuration;
}
私有字符串idSelectedItem=null;
私有列表apptDuration=null;
公共字符串getIdSelectedItem(){
System.out.println(“getIdSelectedItem==”+idSelectedItem);
返回idSelectedItem;}
public void setIdSelectedItem(字符串idSelectedItem){
this.idSelectedItem=idSelectedItem;
System.out.println(“setIdSelectedItem==”+idSelectedItem);
}
公共列表getApptDuration(){
if(apptDuration==null){
apptDuration=新建ArrayList();
添加(新选择项(“P1”、“日”);
添加(新的选择项(“P2”,“5分钟”));
添加(新选择项(“P3”,“10分钟”));
添加(新选择项(“P4”,“15分钟”);
}
返回附件;
}
公共无效设置应用期限(列表应用期限){
this.apptDuration=apptDuration;
}

我的代码有什么问题?

如果不想重新加载,必须使用Ajax,(
a4j
如果您坚持使用RichFaces)

使用
a4j:commandButton
(或类似)显式发送ajax请求,或在
h:selectOne菜单中使用
a4j:actionListener
在更改所选值时发送请求/模型更新。类似(我是从记忆中写的>

 <h:selectOneMenu id=...>
   <h:selectItems .../>
   <a4j:actionListener listener="#{myBean.myControllerMethod}"/>
 </h:selectOneMenu>


另外,没有RichFaces,ajax也可以达到同样的目的。

我使用a4j:support解决了我的问题:现在它工作正常,不再每次都重新加载我的页面:

 <h:selectOneMenu id="appt" value="#{personBean.idSelectedItem}" >
                 <f:selectItems value="#{personBean.apptDuration}"/>
                 <a4j:support event="onchange" action="#{personBean.changeID}" oncomplete="DisableFields()" reRender="updatedId"/>  
                 <h:inputHidden id="updatedId" value="#{personBean.updatedApptId}"/>                 
</h:selectOneMenu>


System.out.println(“set…
在表单模型更新过程中是否被调用?表单是否已提交(是否有类似于您单击的
h:commandButton
o)这是表单标签中的内容。但我是jsf新手,我想在不重新加载页面的情况下提交表单。如何提交表单,请发布示例谢谢支持bean的范围是什么?使用3.3.2版本的richfaces和a4j不支持标签(a4j:actionListener),然后请提供任何其他解决方案,这对我没有帮助:(