Vaadin ConfirmDialog更改标题
问题描述:
我想将ConfirmDialog的标题“确认”更改为我的语言。我看着this,但代码对我来说没有意义,因为我的vaadin插件中的show方法是一种静态方法,而且似乎无法显示工厂返回的对话框。Vaadin ConfirmDialog更改标题
我用这个代码来包装对话框:
package com.xxx.dialog;
import org.vaadin.dialogs.ConfirmDialog;
import com.xxx.message.MessageByLocaleService;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI;
public class DeleteDialog {
private ConfirmDialog cd;
public DeleteDialog(MessageByLocaleService messageByLocaleService) {
cd = ConfirmDialog.getFactory()
.create(messageByLocaleService.getMessage("caption.confirm"),
"", "OK", "Cancel", "");
}
public abstract static class MyListener {
public abstract void receive();
}
public void show(UI ui, MessageByLocaleService messageByLocaleService, MyListener yes, MyListener cancel) {
//this.setCaption(messageByLocaleService.getMessage("caption.confirm"));
//this.setMessageLabel(new Label(messageByLocaleService.getMessage("caption.confirm")));
cd.show(ui, messageByLocaleService.getMessage("confirm.delete"),
new ConfirmDialog.Listener() {
private static final long serialVersionUID = 1L;
public void onClose(ConfirmDialog dialog) {
if (dialog.isConfirmed()) {
// Confirmed to continue
yes.receive();
} else {
// User did not confirm
cancel.receive();
}
}
});
}
}
我有这个class DeleteDialog
为extends ConfirmDialog
了一段时间,这就是为什么一些我的企图被注释掉没有意义的。
答
我设法实现了我的目标,设置了一个新的默认工厂。
package com.xxx.dialog;
import org.vaadin.dialogs.ConfirmDialog;
import com.xxx.message.MessageByLocaleService;
import com.vaadin.ui.UI;
public class DeleteDialog {
ConfirmDialog.Factory oldFactory;
ConfirmDialog.Factory factory;
public DeleteDialog(MessageByLocaleService messageByLocaleService) {
oldFactory = ConfirmDialog.getFactory();
factory = new ConfirmDialog.Factory() {
private static final long serialVersionUID = 1L;
@Override
public ConfirmDialog create(String arg0, String arg1, String arg2, String arg3, String arg4) {
ConfirmDialog cd = oldFactory.create(messageByLocaleService.getMessage("caption.confirm"),
"", messageByLocaleService.getMessage("message.ok"),
messageByLocaleService.getMessage("message.cancel"), null);
cd.setMessage(messageByLocaleService.getMessage("confirm.delete"));
return cd;
}
};
}
public abstract static class MyListener {
public abstract void receive();
}
public void show(UI ui, MessageByLocaleService messageByLocaleService, MyListener yes, MyListener cancel) {
ConfirmDialog.setFactory(factory);
ConfirmDialog.show(ui, messageByLocaleService.getMessage("confirm.delete"),
new ConfirmDialog.Listener() {
private static final long serialVersionUID = 1L;
public void onClose(ConfirmDialog dialog) {
if (dialog.isConfirmed()) {
// Confirmed to continue
yes.receive();
} else {
// User did not confirm
cancel.receive();
}
}
});
}
}
您是否检查messageByLocaleService.getMessage(“caption.confirm”)是否返回null? – nyg
它不应该为空,翻译是在翻译文件中。问题是'show'是一个静态方法,我需要一个类方法。也许我会将插件版本降级为具有非静态方法的版本。 – Adder