Lançado o genesis 3.1-RC1

Após alguns meses de desenvolvimento, foi lançada no final da semana passada a versão 3.1-RC1 do genesis. Essa versão possui uma série de correções em relação à 3.0, além de algumas novas funcionalidades. Incentivamos os desenvolvedores a utilizar esta nova versão.

O genesis é um framework que facilita o desenvolvimento desktop (Swing, SWT e Thinlet) usando um modelo de programação baseado em JavaBeans e anotações que permite ao desenvolvedor focar na lógica de apresentação ao invés de lidar com a API gráfica.

Mais informações sobre as novidades podem ser encontradas nas release notes.

What a jewel Michael.

Esta nova versão estavamos esperando muito ansiosos.
É de muita importancia para o nosso projeto.

Parabens …Legal

opa, vo da uma olhada

vlws

vo dar uma olhada tambem.

t+

parabéns por avançar com o projeto Michael… =)

ola… nunca tinha visto este framework…

estou precisando de um que faça a ligacao automática entre minhas telas FEITAS COM O MATISSE do netbeans e meus objetos, que serao gravados com hibernate… este serveria para o caso?? Por ser feito no matisse tem problemas?? Ele faz somente a ligação de tela/objeto ou já pode fazer tbm a gravacao com hiber?

jopss

Opa. estou tentando usar o genesis mas nao está funcionando… segui o tutorial oficial mas nada. Nao ocorre exceptions, somente nao ocorre o binding… me mostra tambem estas mensagens:

(helpers.StartupHelper               95  ) Setting BeanUtilsBean instance
(helpers.StartupHelper               108 ) Registering JXPathContextFactory class name
(helpers.StartupHelper               129 ) Registering converters
(helpers.StartupHelper               156 ) Registering formatters
(helpers.StartupHelper               228 ) Initialization started
(binding.AbstractBinder              333 ) cidade could not be found while binding class modelo.Cliente
(binding.AbstractBinder              333 ) nome could not be found while binding class modelo.Cliente
(binding.AbstractBinder              366 ) salvar could not be found while binding class modelo.Cliente

Aparentemente funciona a incializacao do helpers, mas o binding nao… faço anotações @Form na minha classe Cliente e @ViewHandler no meu swing. Importo todas as bibliotecas o genesis, bem como as dependencias. O que pode estar ocorrendo? Estou usando o NetBeans e o matisse, poderia ser isso?? Segue as classes:

swing TelaCliente


package javaapplication4;

import modelo.Cliente;
import net.java.dev.genesis.annotation.ViewHandler;
import net.java.dev.genesis.ui.swing.SwingBinder;

@ViewHandler
public class TelaCliente extends javax.swing.JDialog {
    
    public TelaCliente(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        
        SwingBinder binder = new SwingBinder(this, new Cliente());
        binder.bind();
    }

//codigo matisse

private javax.swing.JTextField cidade;
private javax.swing.JButton jButton2;
private javax.swing.JTextField nome;
private javax.swing.JButton salvar;
   

bean Cliente


package modelo;

import net.java.dev.genesis.annotation.Action;
import net.java.dev.genesis.annotation.Form;

@Form
public class Cliente {
    
    private String nome;
    private String cidade;
    
    /** Creates a new instance of Cliente */
    public Cliente() {
    }

    public String getNome() {
        return nome;
    }

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

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }
    
    @Action
    public void salvar(){
        System.out.println(this.nome);
        System.out.println(this.cidade);
    }
}

main:

package javaapplication4;

import java.util.Locale;
import javax.swing.SwingUtilities;
import net.java.dev.genesis.helpers.StartupHelper;

public class Main {
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                
                StartupHelper helper = new StartupHelper(new Locale("pt", "BR"), "dd/MM/yyyy");
        
                helper.setRunNoopCommand(false); //desliga/liga modo servidor
                helper.setLoadValidatorRules(false); //desliga/liga regras de validacoes
        
                helper.initialize();

                TelaCliente tela = new TelaCliente(null,true);
                tela.setVisible(true);
            }
        });
    }
    
}

Alguem saberia oq tem de errado??

jopss 8)

[quote=jopss]

(binding.AbstractBinder 333 ) cidade could not be found while binding class modelo.Cliente (binding.AbstractBinder 333 ) nome could not be found while binding class modelo.Cliente (binding.AbstractBinder 366 ) salvar could not be found while binding class modelo.Cliente [/quote]

Você tem que setar o name dos componentes, não o nome das variáveis.

opa… eh verdade… vlw… funfo… e no netbeans nao adianta fazer:

this.cidade.setName("cidade");
this.nome.setName("nome");
this.salvar.setName("salvar");

tem que ir nas propriedades do matisse… q coisa…

jopss 8)

Uma dúvida… eu queria fazer o seguinte…

Tenho um bean Cliente e minha swing TelaCliente… ok, o binding funfa… mas quero que o método salvar do cliente seja feito em outra classe chamada ClienteAction… ele terá o @Action no método salvar, e na tela teria dois mapeamentos:

SwingBinder binder = new SwingBinder(this,new ClienteAction());
SwingBinder binder = new SwingBinder(this,new Cliente());

Mas isso nao funfa… se a classe ClienteAction acessar o Cliente os valores estao nulos… mas se o metodo salvar for em Cliente funfa!!!
Nao tem como fazer assim??

abraços

jopss 8)

Existe uma opção obscura do Matisse em Tools -> Options -> Advanced Options -> GUI Builder -> Set Component Names que deve ser setada para On. Só que isso não altera os forms existentes; você tem que editar essa propriedade nas Properties do Form via Matisse.

[quote=jopss] SwingBinder binder = new SwingBinder(this,new ClienteAction()); SwingBinder binder = new SwingBinder(this,new Cliente());

Mas isso nao funfa… se a classe ClienteAction acessar o Cliente os valores estao nulos… mas se o metodo salvar for em Cliente funfa!!!
Nao tem como fazer assim??
[/quote]

Pelo que eu entendi, o problema está no código fonte das classes que você escreveu. Sem o fonte delas, fica impossível ajudar. De qualquer forma, é melhor usar a lista do genesis para isso.

Ola… tentei entrar na lista mas nao consegui como funciona… tenho cadastro no java.net. Olhei na lista e tbm nao achei solucao. Entao vou postar por aqui minha duvida. Vou tentar verificar o erro dito acima e caso nao consiga posto novamente…

Mas agora, estou fazendo uns testes antes de implementar o genesis em meus projetos, e estou tentando fazer bind de uma propriedade Object em uma classe. Segue os codigos:

classe Cliente:

package modelo;

import net.java.dev.genesis.annotation.Action;
import net.java.dev.genesis.annotation.DataProvider;
import net.java.dev.genesis.annotation.Form;

@Form
public class Cliente extends Pessoas{
    
    private String telefone;
    private String cidade;
    private Filiacao filiacao = new Filiacao();
    
    /** Creates a new instance of Cliente */
    public Cliente() {
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public Filiacao getFiliacao() {
        return filiacao;
    }

    public void setFiliacao(Filiacao filiacao) {
        this.filiacao = filiacao;
    }
    
    @Action
      public void teste() {
        javax.swing.JOptionPane.showMessageDialog(null,"nome OB: "+getNome());
        javax.swing.JOptionPane.showMessageDialog(null,"endereco OB: "+getEndereco());
        javax.swing.JOptionPane.showMessageDialog(null,"telefone OB: "+getTelefone());
        javax.swing.JOptionPane.showMessageDialog(null,"cidade OB: "+getCidade());
        javax.swing.JOptionPane.showMessageDialog(null,"nomePai OB: "+getFiliacao().getNomePai());
        javax.swing.JOptionPane.showMessageDialog(null,"nomeMae OB: "+getFiliacao().getNomeMae());
    }
}

classe super Pessoas:

package modelo;

public class Pessoas {
    
   private String nome;
   private String endereco;
   
    public Pessoas() {
    }

    public String getNome() {
        return nome;
    }

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

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    
}

classe Filiacao:

package modelo;

import net.java.dev.genesis.annotation.Form;

@Form
public class Filiacao {
    
    private String nomePai;
    private String nomeMae;
    
    /** Creates a new instance of Filiacao */
    public Filiacao() {
    }

    public String getNomePai() {
        return nomePai;
    }

    public void setNomePai(String nomePai) {
        this.nomePai = nomePai;
    }

    public String getNomeMae() {
        return nomeMae;
    }

    public void setNomeMae(String nomeMae) {
        this.nomeMae = nomeMae;
    }
    
}

tela swing:

package javaapplication4;

import controle.ClienteAction;
import modelo.Cliente;
import modelo.Filiacao;
import net.java.dev.genesis.annotation.ViewHandler;
import net.java.dev.genesis.ui.swing.SwingBinder;

@ViewHandler
public class TelaCliente extends javax.swing.JDialog {
    
    Cliente cli = new Cliente();
    
    public TelaCliente(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        
        SwingBinder binder = new SwingBinder(this, new Cliente());
        binder.bind();
        SwingBinder binder = new SwingBinder(this, new Filiacao());
        binder.bind();
    }

Lembrando que tenho 6 txtFields com a propriedade name setada para “nome”,“endereco”,“telefone”,“cidade”,“nomePai” e “nomeMae”.
Lembrando tambem que a propriedade Filiacao em cliente é somente para teste, sem relação a nenhuma análise ou arquitetura.

A classe cliente extende de Pessoas… na super Pessoas nao coloquei @Form, pois cliente herda os metodos, está correto? Pelo menos funciona…
O problema está na classe Filiacao… todos os outros atributos retornam valor do swing, mas em Filiacao está nulo. Tentei inserir @DataProvider(objectField=“filiacao”) do getFiliacao mas retorna erro, pois teria que retornar uma Collection … como faria esse bind? Somente quero inserir e retornar valores do objeto filiacao em cliente.

Sobre inserir em tabelas/comboBox, lí e entendi a referencia de @DataProvider… mas estou com uma dúvida: no caso do comboBox, o retorno dos valores seriam o objeto inteiro que fora colocado (Ex Cliente) ou a propriedade desse objeto (ex String nome) ?? E tambem no caso da tabela, seria cada coluna referencia aos propriedades dos objetos (Ex nome) ou o objeto em si (Ex Cliente)…

abraços
jopss 8)

ops… problemas das classes resolvido… eh soh usar o padrão delegate… caso alguem queira posto como foi…
Fica somente as dúvidas do combo e jtable…

att

jopss

Olá… estou tentando entrar na lista mas nao consigo, parece que enviei um pedido de add…
Consegui fazer muitas das coisas que usava antes com o Genesis, mas uma ainda não. :roll:

Pense numa tela de consulta, com um comboBox em cima listando todos os clientes, e um botao alterar que abre o cadastro deste cliente para alteração. Consigo fazer tbm aparecer os dados do cliente da tela de cadastro, nos txt’s. Conforme a alteracao for efetuando, será feito o bind para o objeto em alteração, que depois gravará no banco de dados. Quando fecha-se a tela de cadastro, nota-se que no comboBox foi tbm modificado por bind… até ai tudo bem. O problema está quando o usuario, por motivo qualquer, começou a modificar o cadastro e quis cancelar, querendo voltar os dados anteriores. Mas o bind já foi feito, alterando também as referencias ao cliente, como no comboBox. Seria necessário novo carregamento do banco, mas isso seria um suicídio a toda hora.

Vi no site que tem algo sobre transasoes e rollback… seria esta solucao? Tentei colocar a anotacao @Transaction no método que abre e carrega os dados na tela, mas ficou na mesma… qual seria a solucao no Genesis para isso?

vlw

jopss :stuck_out_tongue:

ainda nao consegui resolvar o problema do update… alguem saberia oq tem de errado?

jopss :stuck_out_tongue: