Я не понимаю поведение JSF2 во время проверки. Надеюсь, кто-нибудь может мне помочь.
У меня есть форма, где поля проверяются после (ajax) отправки - хорошо
Если проверка не удалась, появляется сообщение об ошибке - хорошо
Для моего примера, когда я ввожу действительный день рождения и поле имя пусто, сообщение об ошибке для имя отображается после отправки.
Теперь, когда я ввожу действительное имя и удаляю ввод из поля birthday , отображается сообщение об ошибке для birthday (это нормально), но теперь старое 'valid' день рождения стоит также в поле ввода!?!
Как мне избежать этого поведения?
Когда я отправляю пустое поле, я хочу увидеть сообщение об ошибке и пустое поле ...
Вот мой пример кода:
Я использую 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;
//...
}
My 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>
Спасибо за несколько советов