【问题标题】:p:selectOneMenu validation failsp:selectOneMenu 验证失败
【发布时间】:2013-12-20 15:09:01
【问题描述】:

我使用 PrimeFaces 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 为真,即使该元素不是必需的。此外,ajax 响应中的更改将选择设置为空选择。

有什么想法吗?

【问题讨论】:

    标签: jsf jakarta-ee primefaces


    【解决方案1】:

    这是一个完全蹩脚的错误...... 豆是@RequestScoped ... 至少需要@ViewScoped

    【讨论】:

      【解决方案2】:

      如果您的角色不是字符串或任何原始类型,那么您可能会得到Validation Error: Value is not valid,因此您需要为您的角色实体/对象实现一个转换器,它会是这样的。

      @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());
             }
         }
      
       }
      

      选择一个菜单

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

      【讨论】:

        猜你喜欢
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-15
        • 2012-10-18
        • 2017-09-21
        • 2015-09-11
        相关资源
        最近更新 更多