Я использую @Preference аннотацию на уровне метода, чтобы получить текущее значение приоритета впрыскивается:eclipse e4 - Как добавить значение предпочтения из ConfigurationScope после изменения значения?
@Inject
@Optional
public void updatePrefValue(@Preference(value = PREFERENCE_NAME) String prefValue) {
System.out.println("updatePrefValue with '" + prefValue + "'.");
this.prefValue = prefValue;
if (lblPrefValue != null && !lblPrefValue.isDisposed()) {
lblPrefValue.setText(prefValue);
}
}
В нескольких местах (например, vogella и в книге Затмение 4 Марк Teufel и д-р Йонас Хелминг) это было сказал, что этот метод снова вызван, когда значение предпочтения изменяется.
Таким образом, после нажатия кнопки, которая устанавливает новые ценностные предпочтения
IEclipsePreferences node = ConfigurationScope.INSTANCE.getNode(PREFERENCES_NODE);
node.put(PREFERENCE_NAME, txtNewPrefValue.getText());
try {
node.flush();
} catch (BackingStoreException e1) {
e1.printStackTrace();
}
Я бы предположил, что этот метод вызывается снова. Это верно, но только если я не изменю ConfigurationScope, а InstanceScope.
InstanceScope.INSTANCE.getNode(PREFERENCES_NODE).put(PREFERENCE_NAME, txtNewPrefValue.getText());
Полный исходный код примера можно увидеть на github.
Возможно ли это? Или это ошибка?
С наилучшими пожеланиями, tobbaumann
Update: Если я указать NodePath, включая объем (/ конфигурация/...) аннотации
@Inject
@Optional
public void updatePrefValue(@Preference(nodePath = "/configuration/" + PREFERENCES_NODE, value = PREFERENCE_NAME) int intPrefValue) {
System.out.println("updatePrefValue with '" + intPrefValue + "'.");
this.intPrefValue = intPrefValue;
if (lblPrefValue != null && !lblPrefValue.isDisposed()) {
lblPrefValue.setText(String.valueOf(intPrefValue));
}
}
тогда метод вызывается снова если значение предпочтения изменяется в ConfigurationScope. Тем не менее это нельзя использовать разумно, потому что в первый раз этот метод вызывается, аргумент равен null (если я хочу установить строковое значение) или 0 (если я хочу установить целочисленное значение). Я предполагаю, что это происходит, потому что значение не может быть найдено (пока) в ConfigurationScope. Значение, которое вы хотели бы иметь здесь, - это значение из DefaultScope (которое было введено ранее, когда я не использую/конфигурацию как префикс nodePath).
Любые идеи?