Действительно ли мне нужно проверять нулевое значение в валидаторах? - PullRequest
0 голосов
/ 01 января 2012

Я где-то читал, что начиная с JSF 2.0, процедуры валидатора требуются для правильной обработки условия, при котором значение параметра равно нулю. Поэтому я только что написал этот метод проверки, который выглядит следующим образом:

public void validateTandC(FacesContext context, UIComponent source, Object value) {
    if (value == null || !(value instanceof Boolean)) {
        FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                "Terms and Conditions Not Accepted", "Value Not Present");
        throw new ValidatorException(fm);
    }
    if (((Boolean) value) != true) {
        FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                "Terms and Condistions Not Accepted",
                "You must check the box that confirms you accept the Terms and Condtions ");
        throw new ValidatorException(fm);
    }
}

Это довольно утомительная конструкция, учитывая, что этот метод упоминается ТОЛЬКО на соответствующей странице и ТОЛЬКО из одного h: selectBooleanCheckbox . Если это так, то почему первый оператор , если когда-либо преобразуется в истину? Произойдет ли NPE в реальной жизни, если у меня его не будет?

Ответы [ 2 ]

2 голосов
/ 01 января 2012

На самом деле свойство, связанное с компонентом <h:selectBooleanCheckbox>, никогда не будет иметь значение null. Если вы не установите флажок, это будет false и наоборот. Следовательно, вам не нужно проверять null в вашем Validator.

Кроме того, для любых других UIInput компонентов, я полагаю, вы можете просто установить для их атрибута required значение true, и null case будет автоматически обработан для вас. Например,

<h:inputText id="myInput" required="true" requiredMessage="Hey yo! Type something here." />
<h:message for="myInput" />

Если пользователь пропустил вышеуказанное текстовое поле, он увидит сообщение Hey yo! Type something here. после нажатия кнопки Отправить.

1 голос
/ 01 января 2012

Если value равно null, то !(value instanceof Boolean) также вернет true (null не является экземпляром Boolean).

Так что вы можете упростить этоисключить часть value == null вашего чека, не меняя функциональности и не беспокоясь о NPE - устраняя вашу "утомительную конструкцию":

if (!(value instanceof Boolean)) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...