como depurar JSF / EL

Como depurar EL na página JSF? Eu gostaria de ver valores de variables, chamadas de function, etc. A melhor solução seria um plugin do eclipse, mas qualquer outra possibilidade é melhor do que adivinhar “Por que esta expressão falhou em renderizar corretamente?”.

O mais próximo que você pode obter no JSF / Facelets é colocar um em algum lugar da view:

  

Pressionar Ctrl Shift D deve mostrar uma janela pop-up com informações de debugging sobre a tree de componentes e todos os parâmetros de solicitação disponíveis e variables ​​de escopo request / view / flash / session / application. É basicamente uma representação do conteúdo de todos esses mapas.

A tecla de atalho é, a propósito, configurável pelo atributo de hotkey de hotkey para que você possa escolher outra sempre que ela entrar em conflito com as teclas de atalho padrão do navegador, como faria no Firefox; Ctrl Shift D , por padrão, mostra o diálogo Adicionar marcadores . Veja como você pode fazer isso para ouvir Ctrl Shift X :

  

Normalmente, você também gostaria de ocultá-lo no estágio de não desenvolvimento, portanto adicione uma condição renderizada assim:

  

Nas informações de debugging mostradas, as informações fornecidas sobre variables ​​com escopo definido não são tão boas como seria de se esperar. Ele mostra apenas o resultado de Object#toString() de todas as variables ​​com escopo definido, com o padrão de com.example.Bean@hashcode . Você não pode explorar suas propriedades e os valores de suas propriedades diretamente como faria na visualização de debugging do depurador do Eclipse. Você precisaria implementar toString() na class de forma que, tanto quanto possível, informações relevantes sejam retornadas (se necessário, você pode até permitir que o Eclipse o auto-aloque pelo código fonte rightclick> Source> Generate toString () ):

 @Override public String toString() { return String.format("Bean[prop1=%s,prop2=%s,prop3=%s]", prop1, prop2, prop3); } 

Quanto às chamadas de método, basta colocar um ponto de interrupção no código-fonte Java da maneira usual. O Eclipse também irá funcionar quando EL chamar o método. Se for um bean gerenciado, você também verá apenas suas propriedades no depurador do Eclipse.

Se você está realmente tendo problemas, então, se puder obter a origem da implementação do EL (fácil o suficiente para o RI), poderá usar o Eclipse para definir pontos de interrupção nos methods de implementação do EL. Você precisa entender como o código EL funciona, mas não é tão complicado. Não para o muito tímido embora.

Outra possibilidade seria criar e avaliar o EL programaticamente. Existem exemplos de como fazer isso. Você pode então usar o depurador para mexer com o que a expressão é e qual é o resultado até você descobrir onde está o seu problema.