segunda-feira, 25 de julho de 2011

Collection, diferença entre Ordenado e Classificado

Continuando com alguns assuntos que fazem parte da prova SCPJ, nesse post vou falar sobre a diferença entre Ordenado e Classificado.

Ordenado (Ordered) - É a ordem em que os elementos do conjunto serão mostrados na tela ao ser iterado. Um ArrayList é ordenado pela posição do índice. LinkedHashSet mantem a ordem estabelecida pela posição, o ultimo elemento a ser inserido sera o ultimo elemento do conjunto, diferentemente do ArrayList que você pode inserir um elemento em um índice especifico. Alguns conjuntos mantém a ordem natural dos elementos, esses conjuntos não são apenas ordenados, mas também classificados.

Classificados (Sorted) - Um conjunto classificado significa que a ordem do conjunto está determinada por alguma(s) regra(s), conhecida(s) como ordem de classificação. Semelhante ao order by do SQL.
A classificação é feita com base em propriedades do próprio objeto. Na maioria das vezes a ordem é feita utilizando a ordem natural, que nada mais é que a ordem alfabética para String e ordem numérica crescente para objetos Integer, porem e para Objetos do tipo por exemplo Cliente? Não existe uma ordem naturam para esse objeto, pelo menos até que o desenvolvedor crie uma, por meio do Comparator ou Comparable (você pode saber mais sobre elas clicando aqui e aqui)

quarta-feira, 13 de julho de 2011

Validando hora com Hibernate

Digamos que em alguma entidade você tem um campo Hora, e por algum motivo você vai utilizar ele como String em vez de Date ( @Temporal ), o campo vai precisar ser validado para não ser inseridos horários inválidos como 55:87, para resolver esse problema basta inserir uma anotação hibernate e o problema esta resolvido.

public class Pedido{

   @Pattern(regex="^([0-1][0-9]|[2][0-3]):[0-5][0-9]$", message="Hora inválida")
   private String hora;

   //getters e setters

}

quinta-feira, 7 de julho de 2011

Criar projeto Seam do zero + Hello World

Nesse post vou mostrar como criar o ambiente Seam e como fazer um Hello World.

Requisitos:


Eclipse
JBoos tools   Tambem pode ser encontrado no Eclipse Market
JBoss Seam 2.2
JBoss Application Server 5.1
Postgres
Postgres JDBC

Primeiramente Instale o Postgres, após isso abra o Eclipse e entre no Eclipse Marketplace

No campo find procure por Jboss Tools e o instale, o download + instalação levara alguns minutos, após instalado reinicie o eclipse.
Descompacte o Jboss Seam e o Jboss Application Server, agora no eclipse clique em File > New > Other... , la procure por Seam Web Project.


Agora vamos ao que interessa, confugurar nosso projeto, em Project name coloque o nome do projeto, no meu caso vou usar o nome projeto, em Target runtime clique em New Runtime... , selecione o Jboss v5.0 e aperte em Next em Application Server Directory clique em Browser... e selecione o path da pasta do Jboss 5.1 Application Server, no meu caso H:/jboss-5.1.0.GA, após isso basta clicar em Finish.
Dynamic Web module version deixe 2.5
Target Server clique em new, escolha Jboss AS 5.1, next, Home directory coloque o path da pasta do Jboss 5.1 Application Server, no meu caso H:/jboss-5.1.0.GA, next, next, finish.

Deve ficar assim

de next, next, next, agora vamos configurar o Seam Facet, em Seam Runtime va em add..., browser e selecione o path da pasta do Seam, no meu caso H:\jboss-seam-2.2.2.Final, clique em finish.
Deploy as: marque EAR.
Database Type: PostgreSQL
Connection profile: New..., PostgreSQL, selecione o path onde foi salvo o postgres JDBC, coloque o username e o password no meu caso postgres / root, save password, Test connection para ver se esta conectando no banco normalmente, next, finish.
Pronto agora basta clicar em finish e esperar o projeto ser criado.
Deve ficar assim.
Serão criadas 4 pastas.
Vamos testar nosso projeto, inicie o jboss (hotkey ctrl + alt + r), com o servidor inicializado abra o browser e entre em http://localhost:8080/projeto/
Voce devera ver isso.


Agora vamos criar nosso Hello World

Clique em projeto > WebContent, botão direito new > Other... > xhtml page > coloque o nome de helloworld > finish


<html>
<head></head>
<body>
Hello world
</body>
</html>

Agora acesse http://localhost:8080/projeto/helloworld.seam
Pronto seu projeto Seam esta montado e seu Hello World criado.

segunda-feira, 4 de julho de 2011

Renderizar campos de acordo com o h:SelectOneRadio selecionado

Nesse post vou mostrar como você pode renderizar novos campos na tela de acordo com o botão Radio selecionado utilizando JSF e Seam.

Vamos criar o caso de um cliente que esta cancelando a assinatura de um serviço, e no formulário de cancelamento existe um radio com alguns motivos de cancelamento como preço, perdeu o interesse, conteúdo fraco, outro. Porem ao clicar em outro deve ser renderizado na tela um campo para ele inserir a justificativa, bem, vamos la.

Primeiro vamos criar um Enum para a justificativa.

public enum JustificativaEnum {
   PRECO, PERDEU_INTERESSE, CONTEUDO_FRACO, OUTRO;
}

Agora na nossa view é onde a magia acontece.


<a4j:region id="motivoRadio">
   <h:selectOneRadio id="cancelamento" value="#{cancelamento.motivoCancelamento}" required="true">
<s:convertEnum />
        <s:enumItem enumValue="PRECO" label="Sem preenchimento" />

        <s:enumItem enumValue="PERDEU_INTERESSE" label="Sem preenchimento" />


        <s:enumItem enumValue="OUTRO" label="Outro" />

<a4j:support event="onclick" reRender="jutificativaField" />

   </h:selectOneRadio>
</a4j:region>



<a4j:outputPanel id="jutificativaField">
<s:decorate rendered="#{cancelamento.motivoCancelamento == 'OUTRO' id="justificativa" template="/layout/edit.xhtml">

<ui:define name="label"> Justificativa </ui:define>
        <h:inputText id="justificativa" value="#{avisoTolerancia.ocorrenciaString}" />
</s:decorate>
</a4j:outputPanel>


Pronto, toda vez que for clicado em um radio é feito o reRender do <a4j:outputPanel> quando for clicado em  OUTRO a área para inserir a justificativa sera renderizada.