2016-07-31 36 views
0

Ich benutze PrimeFaces 6 mit JSF 2.2 (Mojarra). Ich möchte die clientseitige Validierung (CSV) von PrimeFaces verwenden, aber mit p:autocomplete funktioniert es nicht.PrimeFaces clientseitige Validierung mit p: Autocomplete

<p:autoComplete multiple="true" value="#{portfolio.tags}" minQueryLength="3" 
       forceSelection="true" id="tags" maxResults="5" 
       required="true" 
       requiredMessage="#{msg['portfolio.tags.number']}" 
       completeMethod="#{sessionController.tagAutoComplete}"> 
    <f:validator validatorId="tagValidator"/> 
</p:autoComplete> 

Unterhalb der Validator:

PrimeFaces.validator['tagValidator'] = { 
      validate : function(element, value) { 
       alert("ok"); 
     if (value == null || value.length < 5) { 
      throw { 
       summary : 'Validation Error', 
       detail : 'Validation error' 
      } 
     } 
    } 

} 

Ich bemerkte, dass es nie ruft tagValidator Java-Klassen-Instanz statt PrimeFaces.validator['tagValidator'] JavaScript-Implementierung. Die CSV funktioniert korrekt mit p:inputText.

Irgendwelche Ideen?

+0

Haben Sie die clientseitige Validierung 'tagsValidator' oder noch besser, erstellen Sie eine [mcve] – Kukeltje

+0

Ja, ich habe tagValidator (Javascript Validator), aber die Validierung funktioniert nicht –

Antwort

0

Ich habe Ihren Validator unter GitHub PF showcase überprüft und es funktioniert für beide (Eingabe und Autocomplete) Komponenten. In beiden Fällen wurde die JS-Validierung am Anfang ausgelöst und danach wurde der Java-Validator aufgerufen.

Sie haben nicht ganz Code liefern aber wichtige Teile sind:

  1. Zuerst müssen Sie, indem Sie kontext param <context-param> <param-name>primefaces.CLIENT_SIDE_VALIDATION</param-name> <param-value>true</param-value> </context-param> auf CSV-Mechanismus wechseln, aber Sie haben wahrscheinlich das für die Eingabe, wenn die Validierung der Arbeit.
  2. Sie müssen das Attribut validateClient="true" in Ihrem commandButton/commandLink angeben
  3. Ihre Validator-Klasse in Java muss ordnungsgemäß validatorId bereitstellen. Sie finden es in PF showcase (schauen Sie sich die EmailValidator-Klasse an) public String getValidatorId() { return "custom.emailValidator"; }. Sie überprüfen können, ob f:validator validatorId richtig in HTML-Code in Browser erzeugt wird (Verwendung zB Firebug -> sollte in data-p-val="custom.emailValidator" erzeugt werden

Überprüfen Sie diese 3 Punkte Wenn es nicht geben Sie bitte Ihre Java-Validator zur Verfügung stellen wird funktionieren...