请帮我解决下一件事。 提交表单时出现错误“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方法。
答案 0 :(得分:0)
验证错误:值无效
如果提交的值与任何可用的选择项都不匹配,您将收到此错误。换句话说,<f:selectItems>
在表单提交期间没有返回与表单显示期间完全相同的项目。
我将currentAccess的类型更改为SelectItem
这是错误的。它应与SelectItem
的值属性相同。
并将属性immediate =“true”添加到命令按钮,但不调用valueChangeListener方法。
在这种特殊情况下,您不需要valueChangeListener
。在监听器方法中,您只是复制了JSF在更新模型值阶段期间已经在做的事情。摆脱它。我还认为你真的不需要immediate="true"
。也删除它。