2011-10-09 112 views
3

我剛剛創建了一個JSF 2.0的NetBeans項目,我遇到了f:validateRequired問題。豆f:validateRequiered沒有按預期工作

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 

@ManagedBean 
@RequestScoped 
public class TestBean { 
    private String value; 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public String action() { 
     return "test"; 
    } 
} 

和頁面

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core"> 
    <h:head> 
     <title>Test</title> 
     <h:outputStylesheet name="css/stylesheet.css" /> 
    </h:head> 
    <h:body> 
     <h:form> 
      <div id="content"> 
       Value: 
       <h:message for="test" /> 
       <h:inputText value="#{testBean.value}" id="test"> 
        <f:validateRequired /> 
       </h:inputText> 
       <br/> 
       <h:commandButton action="#{testBean.action}" value="Action" /> 
      </div> 
     </h:form> 
    </h:body> 
</html> 

似乎還好吧,但H:消息是不存在的,直到我提供requered =「真」上的inputText屬性。我錯過了什麼?爲什麼驗證不會在沒有requered =「true」屬性的情況下發生?

+0

您是否試圖查看'f:validateLength'是否按預期工作? –

+0

@BheshGurung'f:validateLength minimum =「1」'如果輸入爲空則不起作用。 – Papa

回答

5

我想出了答案:默認情況下,輸入爲空的字段根本未驗證。如果你想驗證這個領域,你必須設置required=true。請參閱UIInput.validateValue() JavaDoc

您可以通過將javax.faces.VALIDATE_EMPTY_FIELDS上下文參數設置爲true來啓用對空字段的驗證。請參閱JavaDoc。這樣做後,上述示例按預期工作。

+1

@BalusC我很確定參數沒有設置。在這種情況下默認是檢查Bean驗證。如果Bean驗證在運行時環境中不存在,驗證將不會繼續。請參見[UIInput.validateValue()JavaDoc](http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/javax/faces/component/UIInput.html#validateValue%28javax.faces.context.FacesContext,%20java .lang.Object%29) – Papa

2

我知道這個帖子是有點老,但我使用MyFaces,顯然javax.faces.VALIDATE_EMPTY_FIELDS默認設置爲false。