2013-12-20 3 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(); 
      } 
     } 

Когда я отправить форму, я получаю POST AJAX с правильно заполненной формой, но когда он вызывает обработчик, validationFailed истинно, даже если элемент не требуется. Также изменения, поступающие в ответ ajax, устанавливают выбор на пустой выбор.

Любая идея?

ответ

1

Это был совершенно хромая вина ... боба был @RequestScoped ... По крайней мере @ViewScoped требуется.

0

Если ваша роль не является строкой или каким-либо примитивным типом, то вы, вероятно, получаете Validation Error: Value is not valid, поэтому вам необходимо реализовать конвертер для вашей роли/объекта Role, это будет что-то вроде этого.

@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> 

И вам нужно, чтобы убедиться, что ваша роль выполняет равных и хэш-код.

Смежные вопросы