2015-02-11 7 views
0

При попытке закрыть приложение Swing и изменить одно значение в поле, приложение спросит вас, хотите ли вы сохранить изменения.Проверка Scout Eclipse для грязных полей

Мой первый вопрос: почему приложение RAP не задает такой же вопрос?

Второй и более важный вопрос - как заставить валидацию изменений полей и как ими управлять.

, например:

У меня есть таблица с строками и некоторые поля ниже таблицы. Если я нажимаю на строку, в полях вводится некоторое значение. Я могу изменить это значение и нажать кнопку save.

Я хотел был бы заставить изменить валидацию на строке щелчок. Поэтому, если применяется прикладная программа изменений, и если я нажимаю на строку, приложение должно предупредить меня, что некоторые изменения не сохраняются. Но я должен уметь манипулировать тем, что такое изменение, а что нет. Например, если таблица в строке щелчка заполнить некоторые данные, если поля не изменяются, но если я ввел значение, это те же самые поля, это изменение.

Я открыл метод

checkSaveNeeded(); 

Но он ничего не делает. (Если я изменить значение или нет)

Я вижу, что каждое поле имеет Mathod

@Override 
public final void checkSaveNeeded() { 
    if (isInitialized()) { 
     try { 
     propertySupport.setPropertyBool(PROP_SAVE_NEEDED, m_touched || execIsSaveNeeded()); 
     } 
     catch (ProcessingException e) { 
     SERVICES.getService(IExceptionHandlerService.class).handleException(e); 
     } 
    } 
    } 

поэтому я должен манипулировать изменения бросьте m_touched?

Как это обрабатывается в разведке?


ADD

Я ищу функцию, которая проверить на грязных полях и всплывает диалоговое окно сообщения, так же, как и при закрытии формы, и способ установки полей загрязнен или нет.

Я смотрю here и here, но все, что он описывает, как значения хранятся для всплывающих сообщений и как стрелять по этим сообщениям (проверка).

ответ

1

Мой первый вопрос: почему приложение RAP не задает тот же вопрос?

Я не уверен, чтобы узнать, какое окно сообщения вы имеете в виду, но это должно быть так.


Есть несколько вопросов о несохраненных изменениях и формы жизненного цикла в Eclipse Scout Forum. Я думаю, вы можете найти их в Google.

Я также время, чтобы начать документировать его в Eclipse, Wiki:

Я думаю, вы должны осуществить в соответствующем поле execIsSaveNeeded(). Реализация по умолчанию в AbstractTableField использует состояние строк, но вы можете представить логику, которую вы хотите.

@Order(10.0) 
public class MyTableField extends AbstractTableField<MyTableField.Table> { 

    @Override 
    protected boolean execIsSaveNeeded() throws ProcessingException { 
    boolean result; 
    //some logic that computes if the table field contains modification (result = true) or not (result = false) 
    return result; 
    } 

    //... 

Надеюсь, это поможет.


Я ищу функцию, которая проверить на грязные поля и всплывает диалоговое окно сообщения, так же, как и при закрытии формы.

Вы говорите из этого окна сообщения, которое появляется, когда пользователь нажимает кнопку «Отмена» в форме?

Do you want to save the changes

Там нет никакой конкретной функции, которые вы можете вызвать для этого. Но вы можете проверить начало функции AbstractForm.doCancel(). Это именно то, что вы ищете.

Я переписать так:

// ensure all fields have the right save-needed-state 
checkSaveNeeded(); 
// find any fields that needs save 
AbstractCollectingFieldVisitor<IFormField> collector = new AbstractCollectingFieldVisitor<IFormField>() { 
    @Override 
    public boolean visitField(IFormField field, int level, int fieldIndex) { 
    if (field instanceof IValueField && field.isSaveNeeded()) { 
     collect(field); 
    } 
    return true; 
    } 
}; 
SomeTestForm.this.visitFields(collector); 

MessageBox.showOkMessage("DEBUG", "You have " + collector.getCollectionCount() + " fields containing a change in your form", null); 

Я изменил Visitor собрать все поля значений с неизменными изменениями. Но вы можете придерживаться оригинальной реализации visitField(..). Вы не можете использовать P_AbstractCollectingFieldVisitor, потому что он является приватным, но вы можете иметь аналогичного посетителя в другом месте.

Я ищу способ установки полей грязными или нет.

Как я уже говорил, execIsSaveNeeded() в каждом поле для некоторой пользовательской логики. Вы также можете позвонить touch()/markSaved() в поле, чтобы указать, что оно содержит изменения или нет. Но если вы не можете сделать иначе, я не думаю, что это правильный подход для вас.

+0

Привет, спасибо, что ответьте. Я вижу, что я могу переопределить execIsSaveNeeded() для каждого поля. Как вызвать всплывающий вопрос? Теперь он всплывает при закрытом действии, но что, если я хочу сделать это при нажатии кнопки? Есть ли способ не переопределять этот метод и просто установить некоторое логическое значение, поскольку это изменение ...? Я вижу методы touch() и markSaved(), это то, что я ищу? –

+0

Я добавляю что-то в вопрос. –

+0

Я попытался дать ответ на ваш дополнительный вопрос. – Jmini

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

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