h:selectoneradio验证错误

时间:2011-07-11 08:03:05

标签: jsf-2

请帮我解决下一件事。 提交表单时出现错误“requestAccess:selectAccess:验证错误:值无效”。

<h:form id="requestAccess">
 <h:selectOneMenu id="orgList" value="#{requestAccessBean.currentOrg}">
<f:selectItem itemLabel="-- select --"   itemValue="null" />
<f:selectItems value="#{requestAccessBean.orgList}" />
<f:ajax event="change" execute="@this" render="selectAccess"/>
 </h:selectOneMenu>

<h:selectOneRadio id="selectAccess" valueChangeListener="#          {requestAccessBean.accessChanged}" value="#{requestAccessBean.currentAccess}" layout="pageDirection">
<f:selectItems value="#{requestAccessBean.accessList}" />
 </h:selectOneRadio>
</h:form>
@ManagedBean(name = "requestAccessBean")
public class RequestAccessSection {

private List<SelectItem> accessList;
private List<SelectItem> orgList;  
private String currentOrg,currentAccess;

public void accessChanged(ValueChangeEvent event) {
 this.currentAccess = event.getNewValue();  
}

 public List<SelectItem> getAccessList() {    
  if (this.accessList == null) {
   this.accessList = returnAccessList();
  }
  return this.accessList;
}

public List<SelectItem> getOrgList() {
 if (this.orgList == null) {
   this.orgList = returnOrgList();
 }
 return this.orgList;
}

public List<SelectItem> returnOrgList() {
  List<OrgUnit> orgList = new ArrayList<OrgUnit>();
  List<SelectItem> selectItemsOrgList = new ArrayList<SelectItem>();
  orgList = getBusinessDelegate().getOfficeBranches();        
    for(OrgUnit org : orgList){
    selectItemsOrgList.add(new SelectItem(org.getGlobalid(), org.getOu()));
 }
 return selectItemsOrgList;
}

public List<SelectItem> returnAccessList() {
  List<String> accessList = new ArrayList<String>();
  List<SelectItem> selectItemsAccessList = new ArrayList<SelectItem>();    
  String userId = (String) getSessionMap().get(USER_ID_KEY);     
  accessList = getBusinessDelegate().getAccessList(userId, this.currentOrg);    
  if(accessList!=null){  
    for(String access : accessList){
      selectItemsAccessList.add(new SelectItem(access, access));
  }    
 }  
 return selectItemsAccessList; 
}

public String goToOrderAccessPage(){   
  return "orderaccess.jsf";
 } 
}

以前,我有orgList和String类型的accessList,验证错误仍然存​​在。 有人能帮助我吗?提前谢谢!

更新: 我将currentAccess的类型更改为SelectItem,并将属性immediate =“true”添加到命令按钮,但不调用valueChangeListener方法。

1 个答案:

答案 0 :(得分:0)

  

验证错误:值无效

如果提交的值与任何可用的选择项都不匹配,您将收到此错误。换句话说,<f:selectItems>在表单提交期间没有返回与表单显示期间完全相同的项目。


  

我将currentAccess的类型更改为SelectItem

这是错误的。它应与SelectItem属性相同。


  

并将属性immediate =“true”添加到命令按钮,但不调用valueChangeListener方法。

在这种特殊情况下,您不需要valueChangeListener。在监听器方法中,您只是复制了JSF在更新模型值阶段期间已经在做的事情。摆脱它。我还认为你真的不需要immediate="true"。也删除它。