JSF: validação, conversão, exibição, formatação

Pessoal, comecei a estudar JSF por conta própria e estou apanhando bastante para encontrar o caminho das pedras.
Sou “zerado” neste framework e não encontrei no fórum nada semelhante à minha dúvida:

Basicamente, quero “transformar” uma sequência de 8 dígitos em data (12345678 —> 12/34/5678 ).

Quero fazer o usuário digitar uma data, mas apenas com números em um campo da página, ou seja, oito dígitos.
Exemplo: dia 25/05/2012 seria 25052012.

  • Aquilo que o usuário digitar (25052012) vou salvar em um atributo do ManagedBeanJSF, mas claro, vou verificar antes se existe só dígitos e também se existe só oito dígitos;
  • Depois, quero exibir a data formatada corretamente (25/05/2012, apenas para visualização na web) em uma página JSF de confirmação;
  • Só quero data pura, não preciso da hora, minutos, segundos, timezone, etc;
  • Não vou usar JavaScript nem JQuery;
  • Não tem banco de dados, é só para eu aprender a usar os recursos do framework e estudar.

No ManagedBeanJSF não importa muito o tipo de dado para a data, ou seja, o atributo data poderia ser um int, String ou Date.
Na página JSF, tudo o que é digitado vem como String, mas como acham que é melhor fazer no ManagedBeanJSF? int, String ou Date?

Como posso fazer essa conversão / validação / formatação / exibição, tanto para salvar no ManagedBean quanto para exibição na tela?

O que tentei fazer até agora (as linhas 3 e 4 estão comentadas, mas as outras também não deram muito certo):

<h:inputText value="#{meuBean.login}" required="true" size="15" maxlength="8" > <f:validateLength minimum="8" /> <!--<f:convertNumber type="number" minIntegerDigits="8" />--> <!--<f:convertNumber type="number" integerOnly="true" minIntegerDigits="8" maxIntegerDigits="8"/>--> <f:convertDateTime pattern="ddMMyyyy" type="date" /> </h:inputText>

Obrigado pessoal!

Blz,

estou usando assim:

          <h:column>
            <f:facet name="header">
              <h:outputText value="Data de fechamento" />
            </f:facet>
            <h:outputText value="#{item.dtFechamento}">
              <f:convertDateTime locale="pt,Br" timeZone="GMT-03:00" pattern="dd/MM/yyyy HH:mm" />
            </h:outputText>
          </h:column> 

e tem funcionado legal. Tenta aí…

Vou ver aqui, já aviso. Obrigado!

leobarbosa, não deu certo…

Preciso que seja possível apenas inserir 8 dígitos no campo da página JSF e transformar tudo em uma data válida.

  • Os 2 primeiros dígitos são o dia e não podem formar um número maior do que 31;
  • O terceiro e quarto dígitos são o mês e não podem formar um número maior do que 12;
  • Além disso, mesmo que dia e mês sejam números válidos, não podem ser, por exemplo, dia 31 e mês 02, pois 2 é fevereiro e não tem 31 dias.

é melhor fazer tudo isso em um método no Bean?

Obrigado leo!

Seguinte,

sim, mas dependendo do seu nível, ainda pode parecer um tanto quanto confuso. Veja se pode ajudar:

beans são classes java, veja alguns exemplos aí

  1. http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html
  2. http://blog.caelum.com.br/java-ee-6-comecando-com-bean-validation/

att,

Olá leobarbosa!

Gostei dos materiais, esses links que você me postou ajudam bem sim, mas você tem razão: ainda está meio confuso por eu ser totalmente iniciante e pretendia fazer primeiro nas páginas, para depois partir para as Annotations diretamente nos beans. Só para não misturar muito os assuntos, entende?

Receba meus sinceros agradecimentos pela força! Já vou deixar esses links aqui como estudo mais avançado por fora.
Se eu não conseguir com JSF o que quero, vou partir para os beans.

Obrigado pela atenção, valeu demais! Abração!!