Populando JTable com Genesis

1 resposta
edson_cruz

Boa tarde,

Estou usando o framework Genesis para popular as JCombo em minha aplicação Swing. Funciona muito bem, porém quando fui fazer o mesmo com uma JTable não deu muito certo, por esta ter uma diferença que ela deve ser preenchida conforme uma pesquisa. Ela deve preencher de forma que eu coloco o nome do usuário que estou procurando e seleciono o botão Buscar.

O problema é que está gerando uma NullPointerException ao buscar:

java.lang.NullPointerException
   at br.com.gvt.view.form.ConsultaUsuarioForm.getDataCriacao(ConsultaUsuarioForm.java:48)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

Alguém sabe o que pode ser?

Valeu!

@Form
public class ConsultaUsuarioForm {
	private Usuario usuario;
	private String nomeBusca;
	
	public ConsultaUsuarioForm() {
		usuario = new Usuario();
	}
	public Long getId() {
		return usuario.getId();
	}
	public void setId(Long id) {
		this.usuario.setId(id);
	}
	public String getNome() {
		return usuario.getNome();
	}
	public void setNome(String nome) {
		this.usuario.setNome(nome);
	}
	public String getLogin() {
		return usuario.getLogin();
	}
	public void setLogin(String login) {
		this.usuario.setLogin(login);
	}
	public String getSenha() {
		return usuario.getSenha();
	}
	public void setSenha(String senha) {
		this.usuario.setSenha(senha);
	}
	public Date getDataCriacao() {
		return usuario.getDataCriacao();
	}
	public void setDataCriacao(Date dataCriacao) {
		this.usuario.setDataCriacao(dataCriacao);
	}
	public Regional getRegional() {
		return usuario.getRegional();
	}
	public void setRegional(Regional regional) {
		this.usuario.setRegional(regional);
	}
	public TipoUsuario getTipoUsuario() {
		return usuario.getTipoUsuario();
	}
	public void setTipoUsuario(TipoUsuario tipoUsuario) {
		this.usuario.setTipoUsuario(tipoUsuario);
	}
	public Usuario getUsuarioSuperior() {
		return usuario.getUsuarioSuperior();
	}
	public void setUsuarioSuperior(Usuario usuarioSuperior) {
		this.usuario.setUsuarioSuperior(usuarioSuperior);
	}
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public String getNomeBusca() {
		return nomeBusca;
	}
	public void setNomeBusca(String nomeBusca) {
		this.nomeBusca = nomeBusca;
	}
	@Action
	@DataProvider(objectField="usuario",callOnInit=false)
	public List<Usuario> populaUsuarios() throws DAOException{
		List<Usuario> list = UsuarioBO.buscarPorNome(nomeBusca);
		return list;
	}
}
@ViewHandler
public class ConsultaUsuarios extends JDialog {

	//...

	private SwingBinder binder = null;

	/**
	 * This is the default constructor
	 */
	public ConsultaUsuarios() {
		super();
		initialize();
		
		binder = new SwingBinder(this,new ConsultaUsuarioForm());
		binder.bind();
	}


	/**
	 * This method initializes tblUsuarios	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getTblUsuarios() {
		if (tblUsuarios == null) {
			String header  [] =  new String[]{
					"Login","Nome","Regional","Tipo","Superior"};
			
			String objDesc [] =  new String[]{
					"login","nome","regional.descricao","tipoUsuario.descricao","usuarioSuperior.nome"};
			
		    TableModel model = new DefaultTableModel(header,0);

		    tblUsuarios = new JTable(model);
		    tblUsuarios.setName("usuario");
		    tblUsuarios.putClientProperty(SwingBinder.COLUMN_NAMES, objDesc);
		    tblUsuarios.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		    
		}
		return tblUsuarios;
	}



	/**
	 * This method initializes btnBuscar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnBuscar() {
		if (btnBuscar == null) {
			btnBuscar = new JButton();
			btnBuscar.setText("Buscar");
			btnBuscar.setName("populaUsuarios");
			btnBuscar.setPreferredSize(new Dimension(75, 22));
		}
		return btnBuscar;
	}

	/**
	 * This method initializes txtConsulta	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtConsulta() {
		if (txtConsulta == null) {
			txtConsulta = new JTextField();
			txtConsulta.setColumns(20);
			txtConsulta.setName("nomeBusca");
		}
		return txtConsulta;
	}
	
	//...
}

1 Resposta

edson_cruz

Depois de muitas tentativas descobri qual era o problema, não precisava de todos aqueles Gets e Sets no Form.

Ficou assim:

@Form
public class ConsultaUsuarioForm {
	private Usuario usuario;
	private String nomeBusca;
	
	public Usuario getUsuario() {
		return usuario;
	}
	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public String getNomeBusca() {
		return nomeBusca;
	}
	
	public void setNomeBusca(String nomeBusca) {
		this.nomeBusca = nomeBusca;
	}
	
	@Action
	@DataProvider(objectField="usuario")
	public List<Usuario> populaUsuarios() throws DAOException{
		List<Usuario> list = UsuarioBO.buscarPorNome(nomeBusca);
		return list;
	}
}

Agora tenho outra dúvida.

Tenho duas telas, uma de cadastro de usuários e outra de consulta. Na de consulta tenho um JTable com vários usuários, quero que quando eu selecione um, este seja transportado (bind) para a tela de cadastro de usuários, assim permitindo a edição.

Alguém sabe como eu faço para os dois @Form se comunicarem?

Valeu!!

Criado 5 de junho de 2009
Ultima resposta 8 de jun. de 2009
Respostas 1
Participantes 1