Split java.util.Date em dois campos h: inputText representando hora e minuto com f: convertDateTime

Gostaria de configurar um campo de data na minha página como este

|hours| h |minutes| 

onde horas e minutos estão em inputText separados.

O feijão tem essa data

 import java.util.Date; ... private Date myDate; ... 

e a página é

  ... <h:inputText id="myDateHours" maxlength="2" value="#{myBean.myDate}"    <h:inputText id="myDateMinutes" maxlength="2" value="#{myBean.myDate}"   ...  

Mas o problema é que quando eu envio o formulário, apenas o último elemento é salvo. Por exemplo, se eu digitar as horas e, em seguida, os minutos, as horas serão sobrescritas e o resultado será

 | 00 | h | minutes | 

Tentei definir

   

mas eu tenho um

 Cannot convert 01/01/70 01:00 of type class java.util.Date to int 

Eu não quero replace meu campo de data com dois campos int (horas e minutos …) Você tem uma ideia?

obrigado

Este caso em particular não é possível se você quiser usar um único valor de modelo.

Este é, no entanto, um candidato perfeito para um componente composto . Ele permite vincular um único valor de modelo a um grupo de componentes existentes intimamente relacionados e executar o processamento / conversão no componente de apoio, totalmente desacoplado da visualização e do bean de apoio. Um dos exemplos pode ser encontrado neste artigo: componente composto com vários campos de input . Este exemplo pode ser alterado para o seu caso específico da seguinte forma:

/resources/components/inputTime.xhtml :

       h     

com.example.InputTime

 @FacesComponent("inputTime") public class InputTime extends UIInput implements NamingContainer { private UIInput hour; private UIInput minute; /** * As required by . */ @Override public String getFamily() { return UINamingContainer.COMPONENT_FAMILY; } /** * Set initial hour and minute based on model. */ @Override public void encodeBegin(FacesContext context) throws IOException { Calendar calendar = Calendar.getInstance(); Date date = (Date) getValue(); if (date != null) { calendar.setTime(date); } hour.setValue(calendar.get(Calendar.HOUR_OF_DAY)); minute.setValue(calendar.get(Calendar.MINUTE)); super.encodeBegin(context); } /** * Returns the submitted value in HH-mm format. */ @Override public Object getSubmittedValue() { return hour.getSubmittedValue() + "-" + minute.getSubmittedValue(); } /** * Converts the submitted value to concrete {@link Date} instance. */ @Override protected Object getConvertedValue(FacesContext context, Object submittedValue) { try { return new SimpleDateFormat("HH-mm").parse((String) submittedValue); } catch (ParseException e) { throw new ConverterException(e); } } public UIInput getHour() { return hour; } public void setHour(UIInput hour) { this.hour = hour; } public UIInput getMinute() { return minute; } public void setMinute(UIInput minute) { this.minute = minute; } } 

Uso:

  ...  

Veja também:

  • Quando usar , arquivos de tags, componentes compostos e / ou componentes personalizados?

Você precisa de dois methods setter separados no bean e, em seguida, faz a mesclagem no servidor.

 Como faço para converter uma cor em um pincel em XAML?
  • Javascript converter HSB / HSV cor para RGB com precisão
  • Como definir propriedades do conversor para cada linha de uma tabela de dados?
  • Intereting Posts