2013-12-20 74 views
0

我使用PrimeFaces selectOneMenu用於如下:號碼:selectOneMenu用於驗證失敗

<p:selectOneMenu id="inviteAbleRoleSelect" 
      styleClass="dropDownSelector" 
      value="#{invitationManagedBean.selectedRole}"> 
       <f:selectItems value="#{invitationManagedBean.inviteAbleRoles}" 
       var="role" 
       itemValue="#{role}" 
       itemLabel="#{localized[role.concat('RoleName')]}"> 
       </f:selectItems> 
    </p:selectOneMenu> 

,並呼籲完成下面的JavaScript:

function handleUserInvitationRequest(xhr,status,args){ 
      if (args.validationFailed) { 
       jQuery('#userInviterDialog').effect("shake", { 
        times : 3 
       }, 70); 
      } else { 
       userInviterDialogVar.hide(); 
       refreshInvitedUserList(); 
      } 
     } 

當我提交表單,我得到一個AJAX POST與正確填充的表單,但是當它調用處理程序,validationFailed是true,即使該元素不是必需的。此外,ajax響應中的更改將select選擇爲空選擇。

有什麼想法?

回答

1

這是一個完全跛腳的故障... 豆是@RequestScoped ... 至少需要@ViewScoped

0

如果您的角色不是字符串或任何原始類型,那麼您可能獲得Validation Error: Value is not valid,因此您需要爲您的角色實體/對象實現一個Converter,它會是這樣的。

@FacesConverter("roleConverter") 
public class RoleConverter implements Converter { 


    @Override 
    public Object getAsObject(FacesContext context, 
           UIComponent component, 
           String value) { 
     //prepare your datasource ex. EJB .. etc 
     if (value.trim().equals("")) { 
      return null; 
     } else { 
      Role role = datasource.findById(value); //get role from database 
      retun role; 
     } 

    } 

    @Override 
    public String getAsString(FacesContext context, 
           UIComponent component, 
           Object value) { 
     if (value == null || value.equals("")) { 
      return ""; 
     } else { 
      return String.valueOf(((Role) value).getId()); 
     } 
    } 

} 

selectOneMenu用於

<p:selectOneMenu id="inviteAbleRoleSelect" 
     styleClass="dropDownSelector" 
     value="#{invitationManagedBean.selectedRole}" converter="roleConverter"> 
      <f:selectItems value="#{invitationManagedBean.inviteAbleRoles}" 
      var="role" 
      itemValue="#{role}" 
      itemLabel="#{localized[role.concat('RoleName')]}"> 
      </f:selectItems> 
</p:selectOneMenu> 

而你需要確保你的角色實現equals和hashCode。