2012-01-08 22 views
5

JSF 2.0.4 kullanıyorum, faces-config.xml'da bir özel doğrulayıcı kaydettirmeli miyim? Özel validator, javax.faces.validator.Validator olan Validator arabirimini kullanır. MTU 2.0 ile gerekli değildirBileşik bileşen içinde bir girdi bileşeni için bir doğrulayıcı nasıl belirlenir?

<cc:myComp id="customcomp1" ... /> 

<cc:myComp id="customcomp2" ...> 
    <f:validator id="myvalidator" for="myComp" /> 
</cc:myComp> 

myComp.xhtml

<cc:interface> 
    <cc:attribute ... /> 
    <!-- more attributes --> 
</cc:interface> 
<cc:implementation> 
    <h:panelGroup layout="block"> 
     <h:inputText id="firstName" ... /> 
     <h:inputText id="middleName" ... /> 
     <h:inputText id="lastName" ... /> 
    </h:panelGroup> 
</cc:implementation> 
+0

Özel bir bileşen veya kompozit bileşen kullanıyor görünüyorsunuz. Bunu nasıl yarattığınızı göstermeniz gerekiyor. Belki de doğrulayıcıyı doğru şekilde devretmediniz. – BalusC

cevap

5

, Doğrulayıcıyı doğru girdiye devretmiyor gibi görünüyorsunuz, bu nedenle doğrulayıcı tamamen göz ardı edilir.

<composite:interface> numaralı telefona <composite:editableValueHolder> olarak istenen girişi (bir doğrulayıcı eklemek istediğiniz) tanımlamanız gerekir.

<cc:interface> 
    <cc:editableValueHolder name="forName" targets="inputId" /> 
    ... 
</cc:interface> 
<cc:implementation> 
    ... 
    <h:inputText id="inputId" ... /> 
    ... 
</cc:implementation> 

yukarıdaki <composite:editableValueHolder> temelde herhangi <f:validator for="forName"><h:inputText id="inputId"> üzerinde uygulanması gerektiğini söyler.

<cc:myComp> 
    <f:validator id="myValidator" for="forName" /> 
</cc:myComp> 

Hatta name ve targets aynı değeri kullanabilirsiniz, ancak kilit noktası MTU tam olarak ne girdi bileşeni bilir böylece <composite:editableValueHolder> hediye olması gerektiğidir: Yani şu o zaman yapmalı Doğrulayıcı hedeflenmelidir, yani kompozitde birden fazla giriş bileşeni olabilir.

+0

Çok teşekkür ederim! –

+0

Rica ederim. Sizin ve Chichiray için – BalusC

+0

1up. :) –

1

sayılı. Doğrulayıcı bilgilerinizi @FacesValidator ile belirtin. Açıklama, validator'unuzu otomatik olarak kaydeder. Xml gerekli.

+0

Nedense benim doğrulamacım çalışmıyor. Lütfen –

3

JSF 2 ile çalışıyorsanız, Validator numaralı müşteriyi oluşturmak için faces-config.xml dosyasına dokunmanız gerektiğini düşünmüyorum. Validator bildirmek için @FacesValidator ek açıklamalarını kullanabilirsiniz. Böyle bir şey olmalıdır:

@FacesValidator("myValidator") 
public class MyValidator implements Validator { 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
     // Your logic 
    } 

} 

Sonra birlikte .xhtml sayfasında kullanmaya başlayabilirsiniz, örneğin, <f:validator> etiket: güncellenmiş Söz konusu kod örneği gereği

<f:validator validatorId="myValidator" /> 
+0

numaralı düzenlemeyi kontrol edin, myValidator sınıfında yukarıda belirtildiği gibi yaptım ama yine de çağrılmıyor. –

+0

Lütfen sorumdaki güncellemeyi kontrol edin. –

+1

@Altair: "Validator" unuzun yanı sıra kompozit bileşeninizin kodunu da gönderebilir misiniz? Tüm bileşen değil, tek bir giriş için bir "Doğrulayıcı" kaydedilmelidir. –