Пустое входное значение не вызывает @NotNull, но вызывает @NotBlank - PullRequest
2 голосов
/ 23 ноября 2011

у меня есть эта сущность:

import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotBlank;

@Entity
@XmlRootElement
@Table
public class Supplier extends AbstractEntity
{
    @Column
    @NotNull
    private String name;

    @Column
    @NotBlank
    private String representative;

    ...
}

и эта форма jsf:

<h:form>
    <p:commandButton value="save" action="#{supplierController.create}" ajax="false"/>

    <h:panelGrid columns="3" cellpadding="4">
        <h:outputLabel value="#{bundle['Name']}" for="name"/>
        <p:inputText id="name" value="#{supplierController.value.name}"/>
        <p:message for="name"/>

        <h:outputLabel value="#{bundle['Representative']}" for="representative"/>
        <p:inputText id="representative" value="#{supplierController.value.representative}"/>
        <p:message for="representative"/>
    </h:panelGrid>
</h:form>

так, почему @NotBlank срабатывает, а @NotNull нет?

Я использую mojarra-2.1.3_01 (корабли hibernate-validator-4.2.0.Final?) Под Glassfish-3.1.1

1 Ответ

3 голосов
/ 23 ноября 2011

Из-за природы HTTP пустые параметры запроса извлекаются как пустая строка вместо null.Таким образом, валидатор @NotNull никогда не будет запущен.Он будет срабатывать только в том случае, если поле отсутствует в форме или когда оно отключено.

Однако вы можете настроить JSF 2.x для интерпретации пустых отправленных значений как нулевых, добавив следующий параметр контекста в web.xml:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

Таким образом, @NotNullсрабатывает для пустых полей.

...