JSF - Adicionar um convertDateTime dinâmico

4 respostas
marvinsiq

Pessoal, estou com um grande problema e quem puder me ajudar com pelo menos alguma sugestão já tá de bom tamanho.
Tenho um data table que crio dinamicamente através da classe HtmlDataTable. Tá funcionando tudo belezinha. O código fica +/- assim:

HtmlDataTable table = new HtmlDataTable();
table.setVar("line");
table.setValue(list);

HtmlColumn col = new HtmlColumn();
HtmlOutputText output = new HtmlOutputText();

FacesContext context = FacesContext.getCurrentInstance();
ELContext elContext = context.getELContext();
Application app = context.getApplication();
ExpressionFactory expressionFactory = app.getExpressionFactory();	
ValueExpression ve = expressionFactory.createValueExpression(elContext, "#{line.nomedoCampo}", String.class);
						
output.setValueExpression("value", ve);

col.getChildren().add(output);

table.getChildren().add(col);

O problema é que para os valores que são data, estão sendo mostrados sem formatação. Se eu fosse fazer pela página seria fácil. Era só adicionar a tag dentro do meu outputText. No entanto como estou fazendo tudo dinâmico não estou conseguindo. Vi q existe uma classe com.sun.faces.taglib.jsf_core.ConvertDateTimeTag; mas não sei como faria pra associar o objeto desta classe com o meu HtmlOutputText. Tentei com o output.getChildren().add mas este método só aceita objetos do tipo UiComponent. Alguém já tentou fazer isto ou algo parecido ou tem alguma sugestão do que poderia ser feito?

4 Respostas

F

http://www.163jsp.com/help/javaee50api/javax/faces/component/UIOutput.html#setConverter%28javax.faces.convert.Converter%29

setConverter

Para criar o converter vc deve saber o converterId e usar o método:

javax.faces.convert.DateTimeConverter c = FacesContext.getInstance().getApplication().createConverter(javax.faces.convert.DateTimeConverter.DATETIME_ID);

Abraço,

Fred

marvinsiq

Cara, valeu pela ajuda… Não tinha visto este método setConverter pois tinha declarado minha variável como sendo UIComponentBase mas dando um new em HtmlOutputText. Daí eu só estava vendo os métodos do UIComponentBase. Mas tirando isso, o exemplo de como vc criou o converter não compilou aqui, daí eu criei assim

DateTimeConverter converter = new DateTimeConverter(); converter.setPattern("dd/MM/yyyy"); converter.setTimeZone(TimeZone.getTimeZone("GMT-3"));

Só que mesmo assim não funcionou. Não deu nenhum erro e a aplicação subiu sem problemas, mas continua exibindo os valores no formato errado. Tá exibindo yyyy-MM-dd e quando eu cadastro um novo registro e volto pra página de listagem esse registro fica aparecendo neste formato: Fri Sep 07 00:00:00 BRT 1984. Quando saio e entro na página de novo ela volta a exibir no formato yyyy-MM-dd. Tem alguma idéia do que pode ser?

F

Tenta não setar o timezone e setar o locale no faces-config.

<application> <locale-config> <default-locale>pt_BR</default-locale> </locale-config> </application>

marvinsiq

Cara valeu pela tentativa em ajudar mas meu arquivo faces-config já está configurado assim.

Criado 10 de dezembro de 2009
Ultima resposta 10 de dez. de 2009
Respostas 4
Participantes 2