2014-01-22 47 views
2

我使用带有几个输入的jsf表单。一些输入是必需的。我通过required =“true”敲击空的空间。但是我需要在提交表单前检查一下,如果用户只是键入了键盘上的一些空格键,导致值存储在数据库中,但我不需要它。我认为这可能是使用qjuery方法修剪(),但我是一个新的jQuery中,我不知道如何实现它。jsf输入文本中没有空白空间需求

<h:form prependId="false"> 
    <div class="row"> 
     <div class="col-lg-3 form-group"> 
      <label>First Name<span class="text-danger"> *</span></label> 
      <h:inputText value="#{userController.user.firstName}" 
       styleClass="form-control" id="firstName" 
       required="true" requiredMessage="#{bundle.common_error_empty_value}"/> 
      <h:message for="firstName" styleClass="validationMsg"></h:message> 
     </div> 
     <div class="col-lg-5 form-group"> 
      <label>Last Name:<span class="text-danger"> *</span></label> 
      <h:inputText value="#{userController.user.lastName}" 
       styleClass="form-control" id="lastName" 
       required="true" requiredMessage="#{bundle.common_error_empty_value}"/> 
      <h:message for="lastName" styleClass="validationMsg"></h:message> 
     </div> 
    </div> 
    //etc... 
</h:form> 

我试过这样的事情。也许有人有一个想法,我怎么可以检查空白领域。

<script type="text/javascript"> 
      function trimInputs() { 
       $('form input').each(function() { 
        $.trim(value); 
       }); 
      } 
     </script> 
+0

你只需要修剪它并保存在数据库中?如果用户只输入空格,会发生什么情况?是否允许他保存记录? –

+0

当用户只键入空白空格时,我需要向他显示错误验证消息,就像我刚才显示的那样,如果用户刚离开并按下提交表单。 – user3127896

+1

也许问题的标题是误导性的。你不希望值被修剪,你希望它不被保存,如果是空的或只有空格(顺便说一句,这不是你实际上试图用jQuery做的)。我鼓励你改变瓷砖以更好地描述问题。 –

回答

6

如果您使用Hibernate验证器,那么它可以与@ mabi的解决方案,这也是解释here解释。否则,你也可以写自己的JSF验证:

@FacesValidator 
public class NoBlankSpaceValidator implements Validator{ 

    @Override 
    public void validate(FacesContext context, UIComponent component, 
      Object value) throws ValidatorException { 
     //Check if user has typed only blank spaces 
     if(value.toString().trim().isEmpty()){ 
      FacesMessage msg = 
       new FacesMessage("Incorrect input provided", 
         "The input must provide some meaningful character"); 
      msg.setSeverity(FacesMessage.SEVERITY_ERROR); 
      throw new ValidatorException(msg); 

     } 
    } 
} 

而且使用它作为:

<h:inputText value="#{userController.user.firstName}" 
    required="true" requiredMessage="#{bundle.common_error_empty_value}" 
    validator="noBlankSpaceValidator"/> 

参见:

+0

感谢您的回答。它效果很好。 – user3127896

+0

很好的工作。令人印象深刻的 –

0

从你的“保存到数据库”位,也许增加一个@NotBlank约束到相应的字段是所有你所需要的。

查看此this answer的示例。

+0

我认为这是一个很好的Hibernate解决方案,但不适用于JSF框架。 – user3127896

+0

是的,如果你周围没有验证框架,@Xtreme Biker的答案就是你需要的。请注意,Hibernate Validator绑定到JSF的验证阶段,所以即使您不使用Hibernate作为ORM也是有用的。 – mabi

3

你可以做这样的老式方法:

<h:inputText id="lastName" 
onchange="this.value = this.value.trim()" 
/> 

并添加任何你想要的验证。 onchange在验证之前触发,所以它会像用户在输入的开始或结束时没有输入任何空格。

+0

谢谢,但问了9个月前问了=) – user3127896

+1

我打字的每封信都不会触发,有效地阻止我进入任何空格吗? – Robert

+0

@Robert - 不,换场后只会在你换完场后才会开火。 onkeydown/up/press会触发你输入的每个字母。 –