ivan
(Ivan Martinez)
August 10, 2016, 2:49pm
#1
Hi!
I would like to Use a getItem().addPropertyChangeListener This is the Code.
public void init(Map<String, Object> params) {
lineasDs.addCollectionChangeListener(e -> calculartotal());
//lineasDs.addItemPropertyChangeListener(e -> calculartotallinea());
lineasDs.addItemPropertyChangeListener(e -> {
if (e.getProperty().equals("articulo")){
if ((lineasDs.getItem() != null) && (lineasDs.getItem().getArticulo() !=null))
lineasDs.getItem().setDescripcion(lineasDs.getItem().getArticulo().getNombre());
lineasDs.getItem().setTipoIva(lineasDs.getItem().getArticulo().getIva());
lineasDs.getItem().setPorcentajeIva(lineasDs.getItem().getArticulo().getIva().getIva());
calculartotallinea();
}
calculartotallinea();
});
getItem().addPropertyChangeListener(e -> {
if (e.getProperty().equals("clientes") && getItem().getClientes() != null) {
getItem().setVendedor(getItem().getClientes().getVendedor());
}
});
}
When i enter on Screen i Get a null Value for this line:
getItem().addPropertyChangeListener(e -> {
It’s not correctly set the addPropertyChangeListener ?
krivopustov
(Konstantin Krivopustov)
August 10, 2016, 6:21pm
#2
Hi Ivan,
The getItem() method should not be used in init(), because the edited instance is not set to the main datasource yet. Use postInit() for adding your listener to the entity. This is explained here: AbstractEditor - CUBA Platform. Developer’s Manual
artamonov
(Yuriy Artamonov)
August 10, 2016, 6:38pm
#3
Important notice: Do not add listeners directly to entity because listeners for events fired by entity are stored in weak references, so they will be removed from memory if no one holds strong references to them.
You should never use listeners on entity, but instead I recommend to use listeners on datasource that contains this entity.
1 Like
ivan
(Ivan Martinez)
August 11, 2016, 1:52pm
#4
Hi i’ve added code to PostInit, but not affect the listeners, has no changes, and not breack when i make any change:
@Override
protected void postInit() {
getItem().addPropertyChangeListener(e -> {
if (e.getProperty().equals("clientes") && getItem().getClientes() != null) {
getItem().setVendedor(getItem().getClientes().getVendedor());
}
});
}
ivan
(Ivan Martinez)
August 11, 2016, 2:22pm
#5
Solved, i’ve added:
@Named("fieldGroup.clientes")
private PickerField clientes;
@Override
protected void postInit() {
clientes.addValueChangeListener(e -> {
if (e.getValue() !=null) {
showNotification("Cliente seleccionado", NotificationType.HUMANIZED);
getItem().setVendedor(getItem().getClientes().getVendedor());
}
});
}