Scout Eclipse 检查脏字段
Scout Eclipse check for dirty fields
当您尝试关闭 Swing 应用程序并更改字段中的相同值时,应用程序会询问您是否要保存更改。
我的第一个问题是为什么 RAP 应用程序不问同样的问题?
第二个也是更重要的问题是如何强制验证字段更改以及如何操作它。
例如:
我有 table,行和一些字段低于 table。如果我单击行,则会在字段中输入一些值。我可以更改此值并单击按钮保存。
我想强制对行单击进行更改验证。因此,如果应用了更改并且单击行,应用程序应警告我某些更改未保存。
但我应该能够操纵什么是变化,什么不是。例如,如果 table 在行上单击填充一些数据,如果字段这不会更改,但如果我输入的值是相同的字段,这就是更改。
我发现了方法
checkSaveNeeded();
但它什么也没做。 (如果我改变值或不)
我看到每个字段都有方法
@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?
Scout 如何处理这个问题?
添加
我正在寻找检查脏字段并弹出消息对话框的功能,与关闭表单时相同,以及设置字段是否脏的方法。
My first question is why RAP application doesn't ask same question ?
我不确定你指的是哪个消息框,但应该是这样。
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;
}
//...
希望对您有所帮助。
I am looking for function that check for dirty fields and pops up message dialog, same as when closing form.
您是在用户单击表单中的“取消”时出现的消息框中发言吗?
没有您可以为此调用的特定函数。但是您可以检查 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);
我已将访问者更改为收集所有未更改的值字段。但是你可以坚持原来的 visitField(..)
实现。您不能使用 P_AbstractCollectingFieldVisitor
,因为它是私有的,但您可以在其他地方使用类似的现场访问者。
I am looking for a way to set fields dirty or not.
正如我告诉您的:execIsSaveNeeded()
在每个字段中用于某些自定义逻辑。您还可以在字段上调用 touch()
/ markSaved()
以指示它是否包含修改。但除非你别无选择,否则我认为这不是适合你的正确方法。
当您尝试关闭 Swing 应用程序并更改字段中的相同值时,应用程序会询问您是否要保存更改。
我的第一个问题是为什么 RAP 应用程序不问同样的问题?
第二个也是更重要的问题是如何强制验证字段更改以及如何操作它。
例如:
我有 table,行和一些字段低于 table。如果我单击行,则会在字段中输入一些值。我可以更改此值并单击按钮保存。
我想强制对行单击进行更改验证。因此,如果应用了更改并且单击行,应用程序应警告我某些更改未保存。 但我应该能够操纵什么是变化,什么不是。例如,如果 table 在行上单击填充一些数据,如果字段这不会更改,但如果我输入的值是相同的字段,这就是更改。
我发现了方法
checkSaveNeeded();
但它什么也没做。 (如果我改变值或不)
我看到每个字段都有方法
@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?
Scout 如何处理这个问题?
添加
我正在寻找检查脏字段并弹出消息对话框的功能,与关闭表单时相同,以及设置字段是否脏的方法。
My first question is why RAP application doesn't ask same question ?
我不确定你指的是哪个消息框,但应该是这样。
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;
}
//...
希望对您有所帮助。
I am looking for function that check for dirty fields and pops up message dialog, same as when closing form.
您是在用户单击表单中的“取消”时出现的消息框中发言吗?
没有您可以为此调用的特定函数。但是您可以检查 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);
我已将访问者更改为收集所有未更改的值字段。但是你可以坚持原来的 visitField(..)
实现。您不能使用 P_AbstractCollectingFieldVisitor
,因为它是私有的,但您可以在其他地方使用类似的现场访问者。
I am looking for a way to set fields dirty or not.
正如我告诉您的:execIsSaveNeeded()
在每个字段中用于某些自定义逻辑。您还可以在字段上调用 touch()
/ markSaved()
以指示它是否包含修改。但除非你别无选择,否则我认为这不是适合你的正确方法。