2017-09-06 2 views
0

Ich möchte den Titel "Confirm" eines ConfirmDialog zu etwas in meiner Sprache ändern. Ich schaute auf this, aber der Code ergibt keinen Sinn für mich, da die Show-Methode in meinem Vaadin Addon eine statische Methode ist und es scheint unmöglich zu sein, einen Dialog von der Fabrik zurückgegeben anzuzeigen.Vaadin ConfirmDialog Ändern des Titels

ich diesen Code verwendet, um den Dialog zu wickeln:

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

ich seit einiger Zeit diese class DeleteDialog als extends ConfirmDialog hatte, deshalb habe ich einige der Versuche, die keinen Sinn machen werden als Kommentar gekennzeichnet.

+0

Haben Sie überprüft, ob 'messageByLocaleService.getMessage ("caption.confirm") 'null zurückgibt? – nyg

+0

Es sollte nicht null sein, die Übersetzung befindet sich in der Übersetzungsdatei. Das Problem ist, dass 'show' eine statische Methode ist, wo ich eine Klassenmethode brauche. Vielleicht werde ich die Addon-Version auf eine Version herabstufen, die eine nicht-statische Methode hat. – Adder

Antwort

0

Ich habe es geschafft, mein Ziel zu erreichen, indem ich eine neue Standardfabrik setzte.

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