2014-09-18 31 views
1

我有一個包含f:validateRegex字段的p:inputText(PrimeFaces)。我試圖確保輸入的信息採用格式。摘錄:是否f:validateRegex呈現給JavaScript?

<p:inputText id="usernameInput" required="true" validatorMessage="Invalid Email" value="#{sessionHandler.username}" > 
    <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"/> 
    <f:ajax event="keyUp" render="emailMessage" /> 
</p:inputText> 
<p:watermark for="usernameInput" value="Email"/> 
<h:message id="emailMessage" /> 

在F:validateRegex和f:阿賈克斯似乎並不奏效(如果出現不正確的格式沒有消息)。當我查看呈現的HTML時,我注意到f:validateRegex和f:ajax都是這樣顯示的,而不是呈現的HTML組件或javascript字段。所以,我的問題是:f:validateRegex應該呈現爲JavaScript的客戶端?如果是這樣,爲什麼它不能正確渲染?

回答

1

沒有。 JSF是一個HTML代碼生成器。 <f:xxx>標籤不是HTML。瀏覽器只能理解HTML,而不是JSF。

症狀表明您忘記在父元素中聲明f: XML名稱空間。例如。

<html ... xmlns:f="http://xmlns.jcp.org/jsf/core"> 

這樣,根本不應該看到與<f:validateRegex>有關的任何內容。它完全是服務器端。當您使用keyup(因此不是keyUp)時,<f:ajax>應翻譯爲某個HTML DOM事件屬性中的腳本,例如onkeyup

+0

我在我的名字空間上收到「NLS丟失消息」警告。我相信我可能使用了不正確的名稱空間。我使用了'xmlns:f =「http:/java.sun.com/jsf/core」' – chRyNaN 2014-09-18 17:18:31

+0

這就是舊的JSF 2.0/2.1命名空間,它應該在JSF 2.2上同樣好用。嘗試升級莫哈拉。在2.2.0/2.2.1/2.2.2版本中,XML名稱空間註冊中存在一些錯誤。如果錯誤仍然存​​在,那麼只需忽略並運行它,並在瀏覽器中驗證是否一切正常。如果是這樣,那麼它可能只是你的編輯器(IDE),而他們又需要升級。 – BalusC 2014-09-18 17:19:04

+0

好吧,會做謝謝 – chRyNaN 2014-09-18 17:20:00