Alguem já conseguiu fazer binding de propriedades do tipo java.util.Date com o genesis, estou numa briga feia aqui.
sempre pego o mesmo erro:
java.lang.NullPointerException
at net.java.dev.genesis.ui.controller.DefaultFormController.updateChangedMap(DefaultFormController.java:237)
at net.java.dev.genesis.ui.controller.DefaultFormController.populate(DefaultFormController.java:190)
at net.java.dev.genesis.ui.controller.DefaultFormController.populate(DefaultFormController.java:174)
at net.java.dev.genesis.ui.binding.AbstractBinder.populateForm(AbstractBinder.java:813)
at net.java.dev.genesis.ui.swing.components.JTextComponentBinder$JTextComponentBoundField.updateForm(JTextComponentBinder.java:191)
at net.java.dev.genesis.ui.swing.components.JTextComponentBinder$1.focusLost(JTextComponentBinder.java:85)
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:213)
at java.awt.Component.processFocusEvent(Component.java:5930)
at java.awt.Component.processEvent(Component.java:5794)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:882)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:555)
at java.awt.Component.dispatchEventImpl(Component.java:4282)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Procurei na lista do projeto e nenhum erro parecido, se trocar a propriedade por String vai normal, estou tentanto um exemplo bobo com um campo String e um Date e sempre o mesmo erro.
manda o codigo do form
mas provalvelmente vc nao esta dando um new Date();
[quote=cpmmarcelo]manda o codigo do form
mas provalvelmente vc nao esta dando um new Date();
[/quote]
Segue o código de exemplo:
import java.util.Date;
import net.java.dev.genesis.annotation.Action;
import net.java.dev.genesis.annotation.Form;
/*
* TesteViewHandler.java
*
* Created on November 5, 2007, 11:27 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/**
*
* @author maxwell
*/
@Form
public class TesteViewHandler {
private String nome;
private Date data;
/** Creates a new instance of TesteViewHandler */
public TesteViewHandler() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
@Action
public void testar(){
System.out.println("nome: " + nome);
System.out.println("data: " + data);
}
}
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.java.dev.genesis.annotation.ViewHandler;
import net.java.dev.genesis.ui.swing.SwingBinder;
/*
* View.java
*
* Created on November 6, 2007, 1:32 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/**
*
* @author maxwell
*/
@ViewHandler
public class View extends JFrame {
SwingBinder binder;
/** Creates a new instance of View */
public View() {
binder = new SwingBinder(this,new TesteViewHandler());
init();
binder.bind();
}
public void init(){
setLayout(new BorderLayout());
JLabel labelNome = new JLabel("Nome:");
JLabel labelData = new JLabel("Data:");
JTextField textNome = new JTextField();
textNome.setName("nome");
JTextField textData = new JTextField();
textData.setName("data");
JButton buttonTestar = new JButton("Testar");
buttonTestar.setName("testar");
JPanel panel = new JPanel(new GridLayout(3,2));
JPanel panel2 = new JPanel();
panel.add(labelNome);
panel.add(textNome);
panel.add(labelData);
panel.add(textData);
panel2.add(buttonTestar);
add(panel,BorderLayout.CENTER);
add(panel2,BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
}
public static void main(String args[]){
View view = new View();
view.setVisible(true);
}
}
cara coloca isto no construtor
public TesteViewHandler() {
data = new Date();
}
Não resolve, já tinha feito isso, fiz novamente para ter certeza e quando carregar a tela, o jtextfield está preenchido com:
Que é o toString() da propriedade data.
Mas se você clicar nele e clicar em outro local para tirar o foco, mesmo sem alterar nada já mostra o mesmo erro.
Não tem que registrar nenhum conversor para o binding ou algo assim?
usa um JFormattedTextField e formata ele com data
MaskFormatter msk = new MaskFormatter();
msk.setPlaceholderCharacter('_');
msk.setMask("##/##/##");
msk.install(jFormattedTextField);
A aplicação real já estava com o JFormattedTextField eu troquei pelo JTextField no exemplo pq pensei que poderia ser isso o problema.
Mesmo o JFormattedTextField o problema continua.
Estava faltando inicializar a classe StartupHelper do genesis…