Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 h:selectoneradio验证错误_Jsf 2 - Fatal编程技术网

Jsf 2 h:selectoneradio验证错误

Jsf 2 h:selectoneradio验证错误,jsf-2,Jsf 2,请帮我处理下一件事。 提交表单时出现错误“requestAccess:selectAccess:验证错误:值无效” <h:form id="requestAccess"> <h:selectOneMenu id="orgList" value="#{requestAccessBean.currentOrg}"> <f:selectItem itemLabel="-- select --" itemValue="null" /> <f:selectI

请帮我处理下一件事。 提交表单时出现错误“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”)
公共类请求访问部分{
私有列表访问列表;
私人名单;
私有字符串currentOrg,currentAccess;
public void accessChanged(ValueChangeEvent事件){
this.currentAccess=event.getNewValue();
}
公共列表getAccessList(){
if(this.accessList==null){
this.accessList=returnAccessList();
}
返回此.accessList;
}
公共列表getOrgList(){
如果(this.orgList==null){
this.orgList=returnOrgList();
}
返回此.orgList;
}
public List returnOrgList(){
List orgList=新建ArrayList();
List selectItemsOrgList=新建ArrayList();
orgList=getBusinessDelegate().GetOfficeBranchs();
用于(组织单元组织:组织列表){
添加(新的SelectItem(org.getGlobalid(),org.getOu());
}
返回selectItemsOrgList;
}
公共列表returnAccessList(){
List accessList=new ArrayList();
List selectItemsAccessList=新建ArrayList();
String userId=(String)getSessionMap().get(USER\u ID\u KEY);
accessList=getBusinessDelegate().getAccessList(userId,this.currentOrg);
如果(accessList!=null){
for(字符串访问:accessList){
selectItemsAccessList.add(新建SelectItem(访问,访问));
}    
}  
返回selectItemsAccessList;
}
公共字符串goToOrderAccessPage(){
返回“orderaccess.jsf”;
} 
}
以前,我有字符串类型的orgList和accessList,验证错误仍然存在。 有人能帮我吗?提前谢谢

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

验证错误:值无效

当提交的值与任何可用的select项不匹配时,将出现此错误。换句话说,
在表单提交期间返回的项目与表单显示期间返回的项目并不完全相同


我将currentAccess的类型更改为SelectItem

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


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


在这种特殊情况下,不需要
valueChangeListener
。在侦听器方法中,您只是复制JSF在更新模型值阶段已经在做的事情。摆脱它。我还有一个印象,你真的不需要这里的
immediate=“true”
。也将其移除。

谢谢您的回答,巴卢斯克!但我不明白为什么提交的值和中的值不同,我应该如何修复它?关于valueChangeListener的评论!
@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";
 } 
}