Reputation: 67
I make use of the RichFaces component rich:pickList to provide a list of Date objects which can be selected
When the data gets validated the JSF page shows a validation error: "Validation Error: Value is not valid". I know, the Date Object is somehow not converted. But I don't know why? First I tried setting the attribute dateConverter:
converter="#{javax.faces.convert.DateTimeConverter}"
This didn't work. Afterwards, I added the following statement:
<f:convertDateTime pattern="MM/dd/yyyy" />
Didn't solve the issue either.
Btw: What is the difference of both ?
Please find below the whole source code:
XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<ui:composition template="/templates/template.xhtml">
<ui:define name="body">
<h:form prependId="false">
<rich:pickList id = "datePL"
value="#{richBean.listOfNewDates}"
sourceCaption="All Dates"
targetCaption="New Dates"
>
<f:selectItems value="#{richBean.listOfDates}"
var="_item" itemValue="#{_item}" itemLabel="#{_item}" />
<f:convertDateTime pattern="MM/dd/yyyy" />
</rich:pickList>
<a4j:commandButton action="#{richBean.printListOfDates()}" value="Print"/>
<rich:notifyMessages stayTime="2000" nonblocking="true" />
</h:form>
</ui:define>
</ui:composition>
</html>
Managed Bean:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named("richBean")
@SessionScoped
public class RichBean implements Serializable {
private static final long serialVersionUID = -2403138958014741653L;
private List<Date> listOfDates;
private List<Date> listOfNewDates;
@PostConstruct
public void init() {
setListOfDates(new ArrayList<Date>());
Calendar cal = Calendar.getInstance();
getListOfDates().add(cal.getTime());
cal.add(Calendar.DATE, 1);
getListOfDates().add(cal.getTime());
cal.add(Calendar.DATE, 2);
getListOfDates().add(cal.getTime());
}
/**
* @return the listOfDates
*/
public List<Date> getListOfDates() {
return listOfDates;
}
/**
* @return the listOfNewDates
*/
public List<Date> getListOfNewDates() {
return listOfNewDates;
}
/**
* @param listOfNewDates the listOfNewDates to set
*/
public void setListOfNewDates(List<Date> listOfNewDates) {
this.listOfNewDates = listOfNewDates;
}
public void printListOfDates() {
for (Iterator<Date> it = listOfNewDates.iterator(); it.hasNext();) {
System.out.println("Neues Datum = " + it.toString());
}
}
/**
* @param listOfDates the listOfDates to set
*/
public void setListOfDates(List<Date> listOfDates) {
this.listOfDates = listOfDates;
}
}
No exception is thrown on server side.
Could somebody help, please ? This would be great! Thanks in advance!
Upvotes: 1
Views: 161
Reputation: 67
I found the solution in another post:JSF 2 - f:selectItems with a Date keyed Map
Don't know why I didn't find this post beforehand..
Upvotes: 1