Přidání jiné webové stránky do Vaadin view

Do Vaadin view lze jinou webovou stránku přidat velmi jednoduše. Pro vložení jiného webu do aktuální stránky se v HTML používá element <iframe>. IFrame (Inline Frame, do češtiny se překládá jako plovoucí rám) vymezuje plochu v aktuální stránce pro vložení jiné webové stránky. Do Vaadin view lze <iframe> vložit pomocí objektu BrowserFrame.

final BrowserFrame browserFrame = new BrowserFrame("Stránka inITjobs.cz", new ExternalResource("https://www.initjobs.cz"));
browserFrame.setWidth("100%");
browserFrame.setHeight("600px");
addComponent(browserFrame);

Pro zvýraznění jsem přidal elementu <iframe> ohraničení.

.v-browserframe iframe {
  padding: 10px;
  border: 1px solid black;
}

Vaadin 8 a odkazy

Vaadin Link (odkaz) je klasický html odkaz <a href…> a na rozdíl od tlačítka a click listeneru jej crawler webových stránek je schopen najít a následovat na url, na kterou směřuje.

Textový odkaz

Link link = new Link("praceodnas.cz", new ExternalResource("https://www.praceodnas.cz"));
addComponent(link);

Obrázek jako odkaz

Jako obrázek je možné použít ClassResource nebo ThemeResource. Pokud používáte klasickou Maven strukturu projektu, ClassResource je zdroj ve složce src/main/resources. V příkladu uvedený new ClassResource("/images/logo.png") znamená, že soubor logo.png se nachází ve složce src/main/resources/images.

Číst dálVaadin 8 a odkazy

Vytvoření nového Spring Vaadin projektu

Nový Spring Boot projekt s Vaadinem lze vytvořit několika způsoby.

Lze použít web start.spring.io. Jak na to můžete vidět v těchto příspěvcích: Spring Boot JDBC projekt, Spring Boot a Spring Batch vytvoření projektu.

Můžete použít vývojové prostředí STS (založeno na Eclipse) a pomocí File -> New -> Spring Starter Project si nechat projekt vygenerovat. Je to podobné předchozímu způsobu, jen není třeba vygenerovaný zip rozbalovat a importovat do IDE.

Další způsob je použít generátor na stránkách Vaadinu: vaadin.com/start/latest/project-base-spring. Pro stažení vygenerovaného projektu je třeba být přihlášen.

Číst dálVytvoření nového Spring Vaadin projektu

Vaadin a Spring Boot – nový projekt

Vytvořením nového projektu se Spring Boot a Vaadinem jsem se zabýval již v tomto příspěvku. Vaadin jde ale mílovými kroku kupředu a to co platilo pro Vaadin 8 již pro Vaadin 10 neplatí. Pokud si projekt necháte vygenerevat z STS (File -> New -> Spring Starter Project) a spustíte jej dostanete tento výpis (na localhost:8080):

Číst dálVaadin a Spring Boot – nový projekt

Responsivní tlačítka v Vaadinu

V tomto příspěvku ukážu, jak vytvořit ve Vaadin 8 tlačítka, která se přizpůsobí velikosti prohlížeče. Pokud bude mít prohlížeč šířku větší než 500px, rozbrazí se tlačítko včetně popisku. Pokud bude šířka menší než 500px, zobrazí se pouze ikona.

VerticalLayout layout = new VerticalLayout();
layout.addStyleName("flexible-layout");
Responsive.makeResponsive(layout);

Button btnAir = new Button("Airplane", VaadinIcons.AIRPLANE);
btnAir.addStyleName("flexible-button");
Button btnBoat = new Button("Boat", VaadinIcons.BOAT);
btnBoat.addStyleName("flexible-button");
Button btnEye = new Button("Eye", VaadinIcons.EYE);
btnEye.addStyleName("flexible-button");
Button btnUser = new Button("User", VaadinIcons.USER);
btnUser.addStyleName("flexible-button");
layout.addComponents(btnAir, btnBoat, btnEye, btnUser);

Tlačítku přidávám styl flexible-button a layoutu flexible-layout. Aby to fungovalo, je ještě potřeba udělat layout responsivní pomocí statické metody Responsive.makeResponsive().

Ostylování pomocí css. Zde třídě flexible-layout přidávám range a určuji, jak má v daném rozsahu vypadat styl třídy flexible-button.

@import "../valo/valo.scss";

@mixin mytheme {
    @include valo;

    // Insert your own theme rules here
  
	.flexible-layout {
	    background: black;
	    color: white;
	
	.flexible-layout[width-range~="0-499px"] {
	    .flexible-button .v-button-caption {
	    	display: none;
	    }
	}
	
	.flexible-layout[width-range~="500px-"] {
	    .flexible-button .v-button-caption {}
	    
	}
}

A takto to vypadá

Vaadin a Spring Boot – vytvoření projektu

Když vytvořím projekt z STS jako Spring Starter Project, po spuštění se mi ukáže v prohlížeči tento text:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Dec 17 12:53:44 CET 2017
There was an unexpected error (type=Not Found, status=404).
No message available

Totéž se stane, pokud si nechám identický projekt vytvořit přes http://start.spring.io/. Je třeba si v projektu vytvořit UI.

import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI;

@SpringUI
public class VaadinUI extends UI {

	@Override
	protected void init(VaadinRequest request) {
		setContent(new Label("Hello World"));
	}

}

Nyní po spuštění (Run As -> Spring Boot App) dostanu tuto stránku:

vaadin-spring-boot-vytvoreni-projektu

Vaadin a TextChangeListener

TextChangeListener je listener pro TextChangeEvent, která vznikne, když uživatel edituje textový obsah pole (nejčastěji psaním textu z klávesnice či vložení textu do textového pole). V následujícím příkladu vytvoříme dvě textová pole a prvnímu dáme TextChangeListener s tím, že hodnota vepsaná do prvního textového pole se změní na velká písmena a zobrazí v druhém textovém poli.

final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);

TextField tf1 = new TextField("First");
TextField tf2 = new TextField("Second");

tf1.addTextChangeListener(new TextChangeListener() {
	@Override
	public void textChange(TextChangeEvent event) {
		tf2.setValue(event.getText().toUpperCase());
	}
});

layout.addComponents(tf1, tf2);

V Javě 8 je možný tento zápis:

final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);

TextField tf1 = new TextField("First");
TextField tf2 = new TextField("Second");

tf1.addTextChangeListener(event -> {
	tf2.setValue(getValue(event.getText().toUpperCase()));
});

layout.addComponents(tf1, tf2);

Výsledek

Vaadin_a_TextChangeListener

Vaadin a VerticalLayout

VerticalLayout má ve výchozím nastavení šířku 100% a výšku nedefinovánu (undefined). To znamená, že na šířku se roztáhne do velikosti okna prohlížeče a výška se přizpůsobí velikosti komponent, které obsahuje. Pokud je výška větší než okno prohlížeče, objeví se posuvník.

final VerticalLayout layout = new VerticalLayout();
Label l1 = new Label("Ahoj");
Label l2 = new Label("Nazdar");
Label l3 = new Label("Čau");

layout.addComponents(l1, l2, l3);

setContent(layout);

vaadin_vertical_layout_01

Pozicování komponent se provádí pomocí metody setComponentAlignment(). Tato metoda se volá až po přidání komponent do layoutu.

Číst dálVaadin a VerticalLayout

Použití ikon ve Vaadinu

Vaadin obsahuje řadu ikon k okamžitému použití. Tyto ikony se lehce dají přidávat komponentám pomocí metody setIcon(). Ukážeme si to na příkladu s komponentou Label.

    @Override
    protected void init(VaadinRequest vaadinRequest) {
        final VerticalLayout layout = new VerticalLayout();

        Label banLB = new Label("label text");
        layout.addComponent(banLB);
        banLB.setCaption("label caption");
        banLB.setIcon(VaadinIcons.BAN);

        Label keyLB = new Label("label text");
        layout.addComponent(keyLB);
        keyLB.setCaption("label caption");
        keyLB.setIcon(VaadinIcons.KEY);

        Label recycleLB = new Label("label text");
        layout.addComponent(recycleLB);
        recycleLB.setCaption("label caption");
        recycleLB.setIcon(VaadinIcons.RECYCLE);

        setContent(layout);
    }

Takto to vypadá.

vaadin_icons

Zde zde naleznete seznam ikon.