2017-09-06 48 views
0

我想将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 DeleteDialogextends ConfirmDialog了一段时间,这就是为什么一些我的企图被注释掉没有意义的。

+0

您是否检查messageByLocaleService.getMessage(“caption.confirm”)是否返回null? – nyg

+0

它不应该为空,翻译是在翻译文件中。问题是'show'是一个静态方法,我需要一个类方法。也许我会将插件版本降级为具有非静态方法的版本。 – Adder

回答

0

我设法实现了我的目标,设置了一个新的默认工厂。

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(); 
         } 
        } 
       }); 
     } 
}