rodrigopalacios@utfpr.edu.br Slides fornecidos pelo professor Prof. Edson Shozo Nishi Eventos Comparando action controllers com event listeners Action listeners Value change listeners Usando JavaScript para submeter forms Incompatibilidade de navegadores Combinando action listeners e action controllers no mesmo elemento de interface Motivação Existem dois tipos de eventos de interface Eventos que iniciam processamento no servidor (back-end) Eventos que afetam somente a forma e formato da interface JSF categoriza código que trata isso como action controllers e event listeners Motivação Action controllers manipulam submissão do formulário Acionados depois dos beans serem populados Acionados depois da lógica de validação Retorna uma string que afeta diretamente a navegação das páginas Event listeners manipulam eventos de interface Frequentemente acionados antes do bean se populado Frequentemente não passam pela lógica de validação Nunca afetam a navegação de páginas Tipos de event listeners ActionListener Disparados por botões de submit, image maps e hypertext links com JavaScript <h:commandButton value=”...” .../> <h:commandButton image=”...” .../> <h:commandLink .../> Automaticamente submetem o form ValueChangeListener Disparados por combo boxes, check boxes, radio buttons, textfields, e outros <h:selectOneMenu .../> <h:selectBooleanCheckbox .../> <h:selectOneRadio .../> <h:inputText .../> Não submetem automaticamente o form Usando ActionListeners em JSP Alguns botões submetem o form e iniciam processamento em backend Use <h:commandButton action=”...” .../> Outros botões afetam somente a interface Use <h:commandButton actionListener=”...” .../> Você usualmente quer que isto ocorra antes dos beans serem populados e especialmente antes da validação Desde que forms estão frequentemente incompletos quando a interface é ajustada Use “immediate” para designar que o listener dispare antes dos beans serem populados ou validação ser executada <h:commandButton actionListener=”...” immediate=”true” .../> Implementando o ActionListener em Java Listener está usualmente no form bean Recebe um ActionEvent como argumento Sem tipo de retorno (void) ActionEvent em javax.faces.event ActionEvent possui o método getComponent que dá acesso a uma referência do componente public void algumMetodo(ActionEvent evt) { // faz alguma coisa } Exemplo: Desabilitar controles na interface Cada controle possui uma propriedade “disabled” que é false por default Usar um botão com um ActionListener atachado para desabilitar ou reabilitar certos controles Exemplo: Desabilitar controles na interface Exemplo específico: Botão para mostrar ou não comboboxes para área da empresa em uma tela de login <h:selectOneMenu value=“...” disabled=“...” ...> <f:selectItems value=“...” /> </h:selectOneMenu> Valor para f:selectItems deve ser uma array de SelectItem Exemplo: Desabilitar controles na interface No bean Arraycom os valores a serem incluídos no controle Classe SelectItem new SelectItem(“Valor”);
Método get que retorna a array
Na página <h:commandButton actionListener=“#{bean.alterar}” immediate=“true”/> ValueChangeListener Anexado a combobox, listbox, radio button, checkbox, textfield, etc Form não submetido automaticamente Adicionar onclick=“submit()” ou onchange=“submit()” Incompatibilidade entre navegadores Mozilla e Opera disparam eventos quando a alteração ocorre IE dispara após outro controle receber o foco ValueChangeListener Recebe ValueChangeEvent como argumento publicvoid fazAlgo(ValueChangeEvent evento) getComponent getOldValue getNewValue Dúvidas?