Tag Archives: Java

Model Binding de enumeration no Struts2

Depois de perder 1 dia inteiro pesquisando e de inúmeras tentativas falhas de como usar o model binding do struts2 com enumerations do Java5, eu finalmente encontrei a solução em um site Japonês. Sim, Japonês. Não entendi nada do que estavam falando, mas consegui entender parte do código, o que foi suficiente.

Resolvi registrar para ajudar quem estiver passando pelo mesmo problema. Infelizmente não tenho o link da onde tirei a solução, se eu achar novamente, eu coloca aqui a fonte.

Usando a seguinte enum e entidade:

public enum Sexo {
    Masculino, Feminino
}

public class Cliente {
    private Sexo sexo;
    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }
    public void setSexo(String sexo) {
        this.sexo = Sexo.valueOf(sexo);
    }
    public Sexo getSexo() {
        return this.sexo;
    }
}

A view ficaria assim:

<select name="cliente.sexo">
	<option <s:if test="%{cliente.sexo == @com.pacote.Sexo@Masculino}">selected="selected"</s:if> value="Masculino">Masculino</option>
	<option <s:if test="%{cliente.sexo == @com.pacote.Sexo@Feminino}">selected="selected"</s:if> value="Feminino">Feminino</option>
</select>

Neste caso, estou considerando que a action tenha uma propriedade do tipo Cliente com nome cliente.
Eu havia tentado de tudo ali nos atributos values da tag option, principalmente 0 e 1 por estar acostumado com o ASP.NET MVC. Mas acabei descobrindo que nas values o correto é ir o nome dos valores da enumeração e a entidade precisa ter um método set que receba uma string. Veja na classe Cliente o método setSexo(String), dentro dele, apenas converto para a enumeração.

Até a próxima!

CSharpista falando Javanês, minha opinião sobre o Java


Até duas semanas atrás, meu conhecimento de Java beirava o nulo. Eu já conhecia a sintaxe, afinal, é parecida com C#. Conhecia alguns frameworks famosos também, como o Hibernate e log4j, mas colocar a mão na massa, nunca.

O projeto em que eu iria iniciar tinha como pré-requisito ser escrito em Java, com isso, tive que aprender linguagem e alguns de seus frameworks. Foi e está sendo uma experiência bem legal, e por isso resolvi compartilhar ela, bem como falar um pouco da minha opinião sobre o Java.

Sintaxe e Padrões

Preciso adminir que sou fã da forma como é implementado o get/set em C#, acho o resultado muito mais legível e de fácil compreensão. Um pequeno comparativo:

Em C#:

//definição
public class Cliente
{
    public string Nome { get; set; }
    public int Idade { get; set; }
}

//uso
public class ClienteController
{
    public void Adicionar()
    {
        Cliente cliente = new Cliente();
        cliente.Nome = "João Salsa";
        cliente.Idade = 23;

        if (cliente.Idade > 20)
        {
            //stuff
        }
    }
}

Em Java:

//definição
public class Cliente {
    private String nome;
    private Integer idade;

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return this.nome;
    }

    public void setIdade(Integer idade) {
        this.idade = idade;
    }

    public String getIdade() {
        return this.idade;
    }
}

//uso
public class ClienteController {
    public void adicionar() {
        Cliente cliente = new Cliente();
        cliente.setNome("João Salsa");
        cliente.setIdade(23);

        if (cliente.getIdade() > 20) {
            //stuff
        }
    }
}

Self-explanatory, além de menor, fica mais fluente, não?

A questão das chaves também me chamou a atenção. Tanto no PHP quanto no Java, o padrão é utilizar as chaves na mesma linha da instrução, já no C#, na linha abaixo. Neste ponto eu fico com o padrão do Java. Compare o if dos dois códigos acima, se no lugar do comentário “//stuff” tivesse realmente uma única instrução, no Java ficaria mais junto e fácil de ler. Eu sei que não há necessidade de se usar chaves nestes casos, mas eu gosto.

IDE (eclipse)

Algumas hotkeys do eclipse são interessantes, por exemplo, o CTRL+SHIFT+T. Este atalho abre uma janela para pesquisar classes pelo nome usando wildcards, * e ?. Vejam a imagem abaixo:


Imagem retirada de Java Place Blog

Existe isso no Visual Studio? Eu quero :D

Outro recurso do eclipse que gostei bastante foi o do highlight que ele faz quando você clica em alguma variável ou método, vejam só:


Imagem retirada de satukubik

Ah, outro detalhe importante. Levei menos de 2 minutos para “instalar” o eclipse contra as quase 1 hora que leva o Visual Studio. Copy and Paste definitivamente é melhor que Next, Next, Finish. E isso ocorreu com tudo o que eu precisei instalar de Java na máquina: Tomcat, Eclipse e JBoss. Apenas a JDK foi no instalador. Kick ass, definitivamente.

Frameworks

Até o momento tive pouco contato com os frameworks Java, mas é impossível não falar do maven. Caramba, que fantástico, é muito útil mesmo, e até o momento não tive nenhum problema com ele. De forma simplificada, é um framework onde você define quais são as dependências do seu projeto e ele se encarrega de montar seu projeto com todas as dependências definidas, fazendo download e adicionando as referências necessárias.

Outros frameworks que tive contato foram Struts2 e JSF. Pelo o que pudi perceber, o JSF é para o ASP.NET WebForms o que o Struts2 é para o ASP.NET MVC. Eu, sendo fã de ASP.NET MVC, optei por usar Struts2. De modo geral, eu estou gostando, alguns itens como model binding e configuração deixam a desejar. A configuração é toda feita em arquivos *.xml e cada dia que passa os xml estão ficando maiores. Saudade do ASP.NET MVC onde eu configurava as rotas via C# e com sintaxe fluente…

Tirando essa parte da configuração, achei bem fácil de customizar os filters, results e interceptor, não tive que ir em nenhum tutorial, descobri sozinho, e isso só mostra o quanto é fácil.

Quanto ao JSF, um dia foi suficiente para eu largá-lo. Muita semelhança com o ASP.NET WebForms me deixou com medo, a falta de controle no HTML foi um dos motivos maiores, além disso a curva de aprendizado do JSF foi maior que o Struts2. Não fui muito a fundo no JSF, posso ter me enganado, mas a primeira impressão não agradou.

Comunidade

Aqui é que geralmente a maior partes das intrigas são geradas. Conforme este meu post, acho o GUJ um excelente fórum de discussão de alto nível. Vejo que falta isso na comunidade .NET, as dúvidas que surgem em alguns fórum são geralmente relacionados às funções de wizard e drag and drop do Visual Studio. É mais fácil achar uma discussão de algum design pattern ou arquitetura em um grupo de Java do que em um de C#.

Felizmente as coisas estão mudando, a grande movimentação que há no grupo de discussão .Net Architects prova que existe muita gente interessada em aprender e discutir este tipo de assunto.

Conclusão

Cada linguagem/plataforma tem seu espaço e momento, nunca vi uma discussão entre duas linguagens que tivesse um fim. Além disso, cada pessoa tem sua preferência e sua opinião, e devemos saber respeitá-las. Eu, por exemplo, não me dou bem com Ruby, já tentei, mas não consigo, eu prefico ficar com PHP e Python. Não digo que Ruby é ruim ou qualquer coisa do tipo, apenas não gosto. Eu não gostava de Java até então, achava tudo muito complicado, agora já estou mudando de opinião, conforme eu fui aprendendo, fui vendo que não é um bixo de 7 cabeças.

Gostei de Java, adorei a oportunidade que estou tendo de aprender, consegui sair um pouco do meu mundinho csharpista e abriu algumas portas em minha mente, porém, minha preferência continua sendo C#, I love it <3 :D

Sharing Buttons by Linksku