Archive for the ‘ Reviews ’ Category
Quando desenvolvemos sistemas, temos um propósito final, atender a necessidade do nosso cliente. Além de uma boa manutenibilidade e funcionamento eficaz, nos preocupar com uma boa interface, usabilidade e navegação, é fundamental para agradar nosso cliente e para termos um Software de sucesso.
Gostaria de compartilhar alguns conhecimentos sobre um componente do RichFaces 4, Drag-and-drop, (o famoso “arraste e solte”, que é usado em diversos softwares) , juntamente com nosso bom e velho JavaServer Faces 2.0.
Com ele temos a seguinte árvore de componentes: rich:dragSource, rich:dropTarget e rich:dragIndicator. O mecanismo básico é bem simples, no <rich:dragSource> colocamos os Objetos que podem ser arrastados pelo usuário, indicando seu tipo com o atributo type(que é uma String) . Sendo assim, temos o <rich:dropTarget> que será quem receberá o Objeto de seu dragSource , de acordo com a compatibilidade do seu tipo, definido no atributo acceptedTypes(que é o tipo definido acima(String), podendo ser mais de um, separados por vírgula). Ou seja, só podemos arrastar um objeto para uma área compatível . Temos também a opção de setar @none para não aceitar nada, ou então @all, para aceitar qualquer tipo. Se esse atributo ficar em branco, será assumido o valor “null”, equivalente as ações de @none. Ainda em dropTarget você tem dois atributos importantes, o dropListener: onde via EL poderá chamar seu método que cuidará de “tirar um objeto de um lugar” e “colocar um objeto em outro lugar”; Com o dropValue: você poderá informar uma String para fazer alguma verificação no seu método, ela que será obtida na classe DropEvent. E por último temos o <rich:dragIndicator> , ele que cuidará do que será exibido para o usuário durante o processo de drag-and-drop, podendo informar seu css nos atributos acceptClass, rejectClass, draggingClass.
Esse tipo de “navegação/animação” vem sido bem utilizada e já virá nativamente no HTML5, sendo bem utilizada também no novo projeto do google(A rede social google +), “arraste e solte”.
Para isso fiz um rápido projeto de exemplo, um jogo da velha, veja os fontes em: https://github.com/JeanDonato/JogoDaVelhaRichFaces4
[]‘ss
Fala galera, sábado passado(26/02/2011) o JUGMS iniciou suas atividades de 2011 a todo vapor. Com um Hands-On muito da hora, tanto para aqueles que não conheciam JSF, para aqueles que já conheciam e também para aqueles que vinham de outra plataforma, foi muito proveitoso todo conteúdo, o bate papo com a galera, discussões sobre arquitetura, padrões, projetos, enfim…, e finalizando com um delicioso coffee-break.
Vou tentar passar aqui um pouco do conteúdo do que foi dito pelo Jõao Bosco Monteiro no Hands-On.
Bom, o objetivo do projeto era desenvolver um simples gerenciador de Blog, utilizando as seguintes tecnologias do JavaEE6: JSF2.0, EJB, CDI e Glassfish 3.0.1.
Tinhamos a seguinte estrutura: um pacote com a entity, um jsf com os converter’s e um model com a lógica de negócio .
O projeto estando dividido da seguinte forma:
Imagem retirada de: http://www.hascode.com/2011/02/creating-a-sample-java-ee-6-blog-application-with-jpa-ejb-cdi-jsf-and-primefaces-on-glassfish/
Além de JPA, utilizamos um pouco do “framework” Bean Validation do Java EE6, esse cara que ajuda a diminuir o esforço para validações em nossas classes com apenas algumas anotações.
Exemplos simples, que foram utilizados no projeto :
- com um @Size(min=”10″, max=”100″) em um atributo, conseguimos controlar o tamanho do campo, especificando os limites em “min” e “max”. Nesse caso o usuário teria que digitar no mínimo 10 caracteres e no máximo 100 em um inputText.
- com um @Past dizemos que o atributo com essa anotação deve ser uma data no passado.
- com um @Future dizemos que o atributo com essa anotação deve ser uma data no futuro.
Várias outras anotações podem serem utilizadas, recomendo a leitura desteLink para quem quiser saber mais sobre.
Utilizamos na camada de negócios EJB 3.1 com seu Recurso Stateful Session Beans onde é mantido um relacionamento de um-para-um entre o cliente e o bean, ou seja, podemos ter a instância do bean adormecida até ser solicitada novamente e reativada , tudo isso gerenciado pelo EJB container, fazendo uso também da ferramenta Java Transaction API (JTA), tendo uma aplicação mais portável, reusável e escalável.
Na view, tivemos páginas para listar, inserir um novo post e uma para pré-visualizar o conteúdo. (como o exemplo era de um blog)
Além da utilização das tags básicas do JSF e da E.L(Expression Language) para montar uma tela, usamos a EL passando parâmetros, aonde por exemplo tinhamos um <h:commandLink> em um <h:dataTable>, que por esse link passava um Objeto para meu controller remover assim: action:”#{blogManager.removePost(item)}” . Tivemos a utilização de ajax também com <f:ajax> para renderizar apenas uma table quando fosse efetuado alguma pesquisa, passando em sua propriedade render=”postsTable searchParams” , o nome da tabela e do input, os campos que eu queria que fosse renderizados quando clicasse no botão. Também usando a <f:setPropertyActionListener> , para fazer associação de um objeto em uma página de listagem com o objeto do meu bean, passando ele em value e no target o cara que estaria no meu controller, ou seja, quando clicasse no link, o objeto do meu bean passaria a valer o objeto que estava no link.
Bom galera, foi isso ae, se esqueci de mencionar alguma coisa, sorry!
As fotos do Hands-On estão disponíveis em:
https://picasaweb.google.com/comunidade.jugms/HandsOnJSF2
E o código fonte do exemplo está no GitHub do JUGMS:
https://github.com/jugms/minicurso-jsf2
Qualquer dúvida, post na lista do grupo, que vai ter sempre alguém para ajudar ! http://groups.google.com/group/jug-ms
Um agradecimento especial ao Edilmar Alves por ceder o espaço e ao Jõao Bosco Monteiro por disponibilizar seu sábado para realizar o mesmo.
see you !
[]‘sss