Para utilizar el Java Time API con PrimeFaces he tenido que hacer la siguiente configuración al utilizar el componente p:calendar para no tener problemas.

AVISO

Este artículo supone que el lector ya sabe ¿para qué es? y ¿cómo funciona? el Java Time API al igual que el Primefaces, no se entrará en detalle sino que directamente se mostrará la información.

p:calendar con LocalDate

1
2
3
4
5
<p:calendar id="fecha" locale="es" navigator="true" value="#{myView.fecha}"
            required="true" requiredMessage="Campo requerido."
            pattern="yyyy/MM/dd" inputStyle="width: 100%">
    <f:convertDateTime type="localDate" pattern="yyyy/MM/dd"/>
</p:calendar>

Se debe observar como el pattern en el p:calendar concuerda con este en el f:convertDateTime.

p:calendar en español

1
2
3
4
5
<p:calendar id="fecha" locale="es" navigator="true" value="#{myView.fecha}"
            required="true" requiredMessage="Campo requerido."
            pattern="yyyy/MM/dd" inputStyle="width: 100%">
    <f:convertDateTime type="localDate" pattern="yyyy/MM/dd"/>
</p:calendar>

Se debe observar el atributo locale="es", este únicamente funciona si a nivel de Javascript se inicializa el siguiente objeto en el array PrimeFaces.locales:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PrimeFaces.locales['es'] = {
    closeText: 'Cerrar',
    prevText: 'Anterior',
    nextText: 'Siguiente',
    monthNames: ['Enero','Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
    monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun','Jul','Ago','Sep','Oct','Nov','Dic'],
    dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
    dayNamesShort: ['Dom','Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'],
    dayNamesMin: ['D','L','M','X','J','V','S'],
    weekHeader: 'Semana',
    firstDay: 1,
    isRTL: false,
    showMonthAfterYear: false,
    yearSuffix: '',
    timeOnlyTitle: 'Sólo hora',
    timeText: 'Tiempo',
    hourText: 'Hora',
    minuteText: 'Minuto',
    secondText: 'Segundo',
    currentText: 'Fecha actual',
    ampm: false,
    month: 'Mes',
    week: 'Semana',
    day: 'Día',
    allDayText : 'Todo el día'
}