2013-04-29 3 views
2

Я использую @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).

Любые идеи?

ответ

0

Я столкнулся с такой же проблемой, и это, как я решил это:

@Inject 
public void trackInterface(@Preference(nodePath = "/configuration/" 
      + Activator.PLUGIN_ID, value = "InterfacePref") String interfaceName)  { 
     if (interfaceName == null || interfaceName.isEmpty()) { 
     // Use default preference 
     IEclipsePreferences preferences = DefaultScope.INSTANCE 
       .getNode(Activator.PLUGIN_ID); 
     interfaceName = preferences.get("InterfacePref", "Multicast"); 
     } 
     else 
     lblInterfaceName = interfaceName; 

 Смежные вопросы

  • Нет связанных вопросов^_^