Как я могу использовать переводчик и / или валидатор, чтобы сделать поле String обязательным в Tapestry 4? - PullRequest
0 голосов
/ 16 марта 2012

Я использую Гобелен 4.

У меня есть несколько TextFields, чьи значения передаются в Strings в классе страницы, и они прекрасно работают, пока в полях есть некоторый контент. Большинство из них не являются обязательными, поэтому я полагаю, что в этом случае я могу использовать StringTranslator с empty=, но для пары полей, для которых требуется значение, у меня возникают трудности с получением проверки. 1007 *

Я ожидал, что простой required валидатор сработает:

<component id="myRequiredField" type="TextField">
    <binding name="value" value="ognl:stringValue" />
    <binding name="validators" value="validators:required" />
</component>

В противном случае я ожидал, что minLength сработает:

<component id="myRequiredField" type="TextField">
    <binding name="value" value="ognl:stringValue" />
    <binding name="validators" value="validators:required,minLength=1" />
</component>

Обе попытки проверки позволяют получить значение, полученное с getStringValue(), равным нулю при отправке формы. Мои Form и Submit компоненты выглядят так:

<component id="myUpdateForm" type="Form">
    <binding name="delegate" value="beans.validationDelegate" />
</component>
<component id="submitUpdate" type="Submit">
    <binding name="action" value="listener:doUpdate" />
</component>

1 Ответ

1 голос
/ 18 марта 2012

Оказывается, проверка работала, но я не проверял, были ли ошибки у моего делегата проверки перед обработкой входящих данных.Следующее, кажется, является правильным подходом для любого слушателя, который зависит от проверки, с учетом настроек, перечисленных в вопросе:

@Bean
public abstract ValidationDelegate getValidationDelegate();

public void doUpdate() {    
    if (!getValidationDelegate().getHasErrors()) {
        // business logic
    }
}
...