2012-04-25 11 views
5

Mam textField Wicket, który zawiera wartość całkowitąJak sprawdzić wartości zerowe w polu tekstowym wicket?

currentValueTextField = new TextField<IntParameter>("valueText", new PropertyModel<IntParameter>(model, "value")); 

Ja załączając niestandardowy walidator do tego, co następuje

currentValueTextField.add(new IntegerValidator()); 

Klasa walidator jest

class IntegerValidator extends AbstractValidator<IntParameter> { 

private static final long serialVersionUID = 5899174401360212883L; 

public IntegerValidator() { 
} 

@Override 
public void onValidate(IValidatable<IntParameter> validatable) { 
    ValidationError error = new ValidationError(); 
    if (model.getValue() == null) { 
     AttributeAppender redOutline = new AttributeAppender("style", new Model<String>("border-style:solid; border-color:#f86b5c; border-width: 3px"), ";"); 
     currentValueTextField.add(redOutline); 
     currentValueTextField.getParent().getParent().add(redOutline); 
     validatable.error(error); 
     } 
    } 
} 

jednak jeśli nic nie wpisuję w polu tekstowym, moja metoda onValidate() nie jest wywoływana.

Jaki jest zalecany sposób sprawdzenia wartości pustych w tym przypadku? Chciałbym również sprawdzić zakres dla wprowadzonej wartości.

+0

nie wiem o Wicket ale na innych forach internetowych, które znam walidacji nie jest wymagana pusty pola tekstowe. Niektóre z nich udostępniają dodatkowe znaczniki dla swoich znaczników, aby włączyć/wyłączyć wymagane sprawdzenia, podczas gdy w innych może być konieczne sprawdzenie po umieszczeniu wartości formularza w modelu (lub później sprawdzeniu modelu). – Thomas

Odpowiedz

3

Domyślnie przesłonięto validateOnNullValue(), czyli false.

@Override 
public boolean validateOnNullValue() 
{ 
    return true; 
} 

Jest to opis validateOnNullValue() metody:

Wskazuje, czy do sprawdzania wartość, jeśli jest to null. Zazwyczaj pożądane jest pominięcie sprawdzania poprawności, jeśli wartość wynosi null, chyba że chcemy się upewnić, że wartość ta jest w rzeczywistości null (przypadek rzadko używany). Walidatory, które rozszerzają to i , chcą zapewnić, że wartość to null, powinna zastąpić tę metodę i zwrócić true.

+0

Zastąpienie validateOnNullValue() powoduje wywołanie mojego walidatora, ale interesujące jest to, że wartość w moim modelu nie jest ustawiona na wartość null.Tak więc mój kod weryfikatora nie spowoduje błędu, ponieważ uważa, że ​​pole tekstowe ma wartość inną niż null. –

+0

Mmm ... Ale 'null' musi znajdować się tutaj' validatable.getValue() ', podczas przekazywania rzutu walidatora wartość nadal nie jest ustawiona w modelu. – jordeu

+0

Dzięki! validatable.getValue() zrobił lewę. –

4

zadzwoń

currentValueTextField.setRequired(true); 

zaznaczyć pole wymagane i mają Furtka obsłużyć wartości null na swój własny. Możesz łatwo połączyć wiele walidatorów dla każdego pola wejściowego.

Każda specjalna obsługa błędów, np. Dodawanie czerwonych obramowań lub wyświetlanie komunikatów o błędach, może zostać zaimplementowana w metodzie onError formularza lub poprzez dodanie FeedbackBorder s do odpowiednich pól.

+0

Problem w tym, że nie mam wpływu na sposób wskazania błędu. Chciałbym dodać czerwoną ramkę do pola tekstowego, ale furtka wstawi komunikat błędu w panelu Feedback. Nie chcę używać panelu opinii. –

+0

@AndrewFielden Można to zarchiwizować poprzez implementację onError() dla formularza. Przedłużyłem swoją odpowiedź, aby to omówić. – Nicktar

+0

Dzięki. Faceci, którzy napisali Wicket, pomyśleli o wszystkim. –

1

Lepszy (i wielokrotnego użytku) sposobem, aby to zrobić, to zastąpić metodę isEnabled(Component) z zachowania:

public class HomePage extends WebPage { 
    private Integer value; 
    public HomePage() { 
     add(new FeedbackPanel("feedback")); 
     add(new Form("form", new CompoundPropertyModel(this)) 
      .add(new TextField("value") 
       .setRequired(true) 
       .add(new ErrorDecorationBehavior())) 
      .add(new Button("submit") { 
       @Override 
       public void onSubmit() { 
        info(value.toString()); 
       } 
      })); 
    } 
} 

class ErrorDecorationBehavior extends AttributeAppender { 
    public ErrorDecorationBehavior() { 
     super("style", true, Model.of("border-style:solid; border-color:#f86b5c; border-width: 3px"), ","); 
    } 
    @Override 
    public boolean isEnabled(Component component) { 
     return super.isEnabled(component) && component.hasErrorMessage(); 
    } 
} 
2
currentValueTextField.setRequired(true); 

teraz trzeba dostosować komunikat o błędzie. Więc podklasa FeedbackPanel.

można znaleźć więcej informacji w następującym link

Dodaj tę klasę do formularza lub komponentu

Powiązane problemy