2011-11-08 102 views
3

我正在創建一個JSF 2應用程序,我試圖在bean中使用表單驗證,而不是使用faces-page。我還想使用.properties文件來存儲消息。用於bean驗證的自定義驗證消息

我看着this question但我不認爲我有屬性文件設置正確。

比方說,我有一個名爲用戶在包豆稱爲「開發」:

@ManagedBean 
@SessionScoped 
public class User implements Serializable { 

    @Pattern(pattern="[email protected]+\\.[a-z]+", message="{dev.User.emailAddress}") 
    private String emailAddress; 

    // getter/setter 
} 

我還創建了在WEB-INF/classes目錄文件「ValidationMessages.properties」(我使用Netbeans的7.0.1)

在ValidationMessages.properties文件我已經有了這個鍵/值線:

dev.User.emailAddress=Custom invalid email message 

而且我認爲(user.xhtml)看起來是這樣的:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html"> 
<h:head> 
    <title>User registration</title> 
</h:head> 
<h:body> 
    <h:form> 
     <h:inputText id="emailAddress" value="#{user.emailAddress}" required="true" /> 
     <h:message for="emailAddress" /> 
     <h:commandButton value="Ok" action="null" /> 
    </h:form> 
</h:body> 

當我輸入了無效的電子郵件,然後按下按鈕,網頁中的驗證消息上寫着:

{dev.User.emailAddress} 

,而不是

Custom invalid email message 

可能的問題是我沒有在web.xml中註冊我的屬性文件?

我應該在bean中將required =「true」切換到@NotNull。有什麼更多的,我需要做的比插入此:

<context-param> 
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> 
    <param-value>true</param-value> 
</context-param> 

BalusC's blog的解釋呢?

在此先感謝!

/丹尼斯

回答

2

我將.properties文件放在資源文件夾中,它工作,沒有必要在任何地方註冊文件。記錄:我正在使用Netbeans 7.0.1和Maven。

感謝您的幫助,BalusC!

+0

這很奇怪。你使用了什麼bean驗證實現和/或什麼servletcontainer? – BalusC

+0

我使用的是Glassfish 3.1(與Netbeans捆綁)。不確定你的意思是通過bean驗證實現嗎? –

3

我還創建了在WEB-INF/classes目錄文件 'ValidationMessages.properties'(我使用NetBeans 7.0.1)

我明白你自己把它直接放在項目的/WEB-INF/classes文件夾中?如果您讓IDE構建/部署WAR,這可能會被忽略/重寫(至少在Eclipse中這是真的)。您應該將該文件直接放入項目的Java源文件夾的根目錄中。在將項目導出到WAR文件並使用一些ZIP工具提取它之後,您可以驗證自己是否確實以/WEB-INF/classes結束。

+0

認爲看起來很魚腥:)好的,我把.properties文件放在java根目錄下,當我編譯並查看EAR文件時,它會在WEB-INF中結束。但我的問題仍然存在,而不是從中寫出價值。屬性文件,它只是打印密鑰。即它會打印{dev.User.emailAddress}而不是'自定義無效電子郵件'。這就像它不明白我想打印一個值,而不僅僅是一個字符串。想法? –