Я не понимаю поведение JSF2 во время valdation. Надеюсь, кто-нибудь может мне помочь.
У меня есть форма, где поля проверяются после (ajax) submit - ok
Если проверка не выполнена, отображается сообщение об ошибке - ok
В моем примере, когда я введу действующий день рождения и имя поля пуст, после отправки отображается сообщение об ошибке. Теперь, когда я ввожу действительное имя и удаляю входные данные из поля дня рождения, errormessage отображается для дня рождения (это нормально), но теперь старый "действительный" день рождения стоит также в поле ввода!?!
Как я могу избежать такого поведения? Когда я отправляю пустое поле, я хочу видеть errormessage и пустое поле...
Вот мой пример кода:
Я использую ManagedBean (TestBean), который содержит EntityBean (Contact). Контакт содержит валидации на аннотации.
public class Contact implements Serializable {
@NotNull
@Temporal(TemporalType.DATE)
private Date birthday;
@NotNull
@Size(min=3, max=15)
private String name;
//...
}
Мой ManagedBean:
@ManagedBean
@ViewScoped
public class TestBean implements Serializable {
private Contact contact;
@PostConstruct
void init() {
System.out.println("init...");
contact = new Contact();
}
public void newContact(ActionEvent ae) {
System.out.println("newContact...");
contact = new Contact();
}
public void save() {
System.out.println("save...");
//TODO do something with contact...
}
public Contact getContact() { return contact; }
public void setContact(Contact contact) {this.contact = contact;}
}
Здесь моя страница JSF:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" >
<h:body>
<h:form>
<h:panelGrid columns="3">
<h:outputText value="Birthday: " />
<h:inputText id="birthday" value="#{testBean.contact.birthday}">
<f:convertDateTime/>
</h:inputText>
<h:message for="birthday" />
<h:outputText value="Name: " />
<h:inputText id="name" value="#{testBean.contact.name}"/>
<h:message for="name" />
</h:panelGrid>
<h:commandButton value="submit" action="#{testBean.save}">
<f:ajax execute="@form" render="@form"/>
</h:commandButton>
<h:commandButton value="newContact" actionListener="#{testBean.newContact}"
immediate="true">
<f:ajax render="@form"/>
</h:commandButton>
</h:form>
</h:body>
</html>
наконец-то фрагмент из web.xml
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>true</param-value>
</context-param>
Спасибо за некоторые советы