2014-01-22 88 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會觸發你輸入的每個字母。 –