Skip to content

Commit 9498777

Browse files
committed
Fixes issue where Listeners added in addTubePair are never removed in detachTubePair.
1 parent 1c55e99 commit 9498777

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

sormas-ui/src/main/java/de/symeda/sormas/ui/samples/diseasesection/TubeFieldHandler.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
package de.symeda.sormas.ui.samples.diseasesection;
1919

2020
import java.util.Collection;
21+
import java.util.HashMap;
22+
import java.util.Map;
2123

2224
import com.vaadin.ui.CustomLayout;
2325
import com.vaadin.v7.data.Property;
@@ -42,6 +44,8 @@ public class TubeFieldHandler {
4244

4345
private final FieldGroup fieldGroup;
4446
private final CustomLayout panel;
47+
private final Map<String, Property.ValueChangeListener> numericListeners = new HashMap<>();
48+
private final Map<String, Property.ValueChangeListener> gt10Listeners = new HashMap<>();
4549

4650
public TubeFieldHandler(FieldGroup fieldGroup, CustomLayout panel) {
4751
this.fieldGroup = fieldGroup;
@@ -82,21 +86,31 @@ private void addTubePair(String numericId, String gt10Id) {
8286
gt10Field.setVisible(false);
8387
panel.addComponent(gt10Field, gt10Id);
8488

85-
// numeric → auto-check GT10 when value > 10
86-
numericField.addValueChangeListener(e -> handleNumericChange(numericId, gt10Id));
89+
Property.ValueChangeListener numericListener = e -> handleNumericChange(numericId, gt10Id);
90+
numericField.addValueChangeListener(numericListener);
91+
numericListeners.put(numericId, numericListener);
8792

88-
// GT10 checkbox → clear numeric if value contradicts the checkbox
89-
gt10Field.addValueChangeListener(e -> handleGt10Change(e, numericId));
93+
Property.ValueChangeListener gt10Listener = e -> handleGt10Change(e, numericId);
94+
gt10Field.addValueChangeListener(gt10Listener);
95+
gt10Listeners.put(gt10Id, gt10Listener);
9096
}
9197

9298
private void detachTubePair(String numericId, String gt10Id) {
9399
Field<?> numericField = fieldGroup.getField(numericId);
94100
if (numericField != null) {
101+
Property.ValueChangeListener listener = numericListeners.remove(numericId);
102+
if (listener != null) {
103+
numericField.removeValueChangeListener(listener);
104+
}
95105
fieldGroup.unbind(numericField);
96106
panel.removeComponent(numericField);
97107
}
98108
Field<?> gt10Field = fieldGroup.getField(gt10Id);
99109
if (gt10Field != null) {
110+
Property.ValueChangeListener listener = gt10Listeners.remove(gt10Id);
111+
if (listener != null) {
112+
gt10Field.removeValueChangeListener(listener);
113+
}
100114
fieldGroup.unbind(gt10Field);
101115
panel.removeComponent(gt10Field);
102116
}

0 commit comments

Comments
 (0)