Pokud si vytvoříte Dynamic Web Project v Eclipse, přidáte Tomcat a pokusíte se vytvořit vlastní servlet, může se vám stát, že knihovnu javax.servlet nelze importovat. Řešením je přidat Apache Tomcat runtime: pravým na projekt -> Properties -> v pravo záložka Runtimes -> zakliknout Apache Tomcat -> potvrdit.
Java
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á
Zobrazení effective pom v Idea IDE
V Idea IDE lze efektivní pom zobrazit následovně: Kliknout pravým tlačítkem na pom.xml v projektu -> Maven -> Show Effective POM.
Vysvětlení pojmů
Super pom
Všechny maven projekty dědí z super pomu, který obsahuje defaultní hodnoty. Super pom je rodič všech pom souborů.
Simple pom
Pom, který je ve vašem projektu. V případě jednoduchého projektu není třeba definovat téměr vůbec nic, vše potřebné se vezme ze super pomu.
Effective pom
Spojení super a simple (projektového) pomu.
Zdroje:
Problémy při vytváření webového projektu v Javě
Pokud si necháme vygenerovat projekt pomocí mavenu: File -> New -> Maven project -> maven-archetype-webapp (verze 1.0) -> … a pokud tento projekt nasadíme na Tomcat, zobrazí se očekávaný výstup – jednoduchá stránka s textem „Hello World!“. Problém nastane v okamžiku, kdy začneme používat jsp.
Když původní jednoduchou stránku
<html> <body> <h2>Hello World!</h2> </body> </html>
nahradíme například tímto:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ prefix="c" taglib uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
</head>
<body>
<c:set var="message" value="Hello World"/>
<c:set var="otherMessage" value="This is other message."/>
<c:set var="display" value="${true}"/>
<c:if test="${display}">
<c:out value="${message}"></c:out>
</c:if>
<c:out value="${otherMessage}"></c:out>
</body>
</html>
dostaneme tuto chybu:
Proudy v Java 8
Proudové (stream) zpracovávání je novinka Javy 8. Cílem je zjednodušit operace nad posloupnostmi prvků. Umožňují zřetězení operací. Operace se dělí do dvou hlavních skupin:
- terminální (terminal) – touto operací je proud uzavřen
- neterminální (intermediate) – vytváří nový proud
Jak je vidět z popisu, neterminální operace lze za sebou řetězit, dokud se nezavolá operace terminální.
Nejpoužívanější operace jsou
| forEach | terminální | všechny prvky proudu postupně odešle konzumentovi |
| findFirst | terminální | vrátí první prvek pokud existuje |
| collect | terminální | sesbírá elementy a vytvoří z nich návratovou strukturu |
| map | neterminální | převede prvky na jiné |
| filter | neterminální | filtruje podle zadaného predikátu (podmínky) |
| sorted | neterminální | seřadí prvky |
Příklady použití.
Testování private static final proměnné
Při testování se můžeme setkat s tím, že potřebujeme otestovat funkcionalitu, která není přes vystavené API přístupná. Jako příklad zde uvedu třídu Extractor. Jedná se o třídu, která čte soubor z přesně zadaného umístění. Z toho důvodu je soubor zadán jako private static final. Jak otestovat metodu getContent(), když nemáme přístup k souboru C:\input.txt (nemůžeme tento soubor modifikovat a dokonce tento soubor ani nemusí v době testů existovat)? Řešením je použít reflexi.
Extractor.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class Extractor {
private static final File INPUT = new File("C:\\input.txt");
public Extractor() {}
public String getContent() {
String result = "";
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(INPUT), "UTF-8"))) {
String line;
while ((line = br.readLine()) != null) {
result = result + line;
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return result;
}
}
Testovací soubor testinput.txt umístěný v src/test/resources.
Ignorování JUnit testů
V případě, že potřebujete, aby se některé JUnit testy nespouštěly, nabízí JUnit anotaci @Ignore (javadoc).
import org.junit.Ignore;
import org.junit.Test;
public class JUnitIgnoreTest {
@Ignore
@Test
public void test1() {
assertEquals(11, 22);
}
@Test
public void test2() {
assertEquals(2, 2);
}
}
Je vidět, test byl ignorován. Pokud bychom anotaci @Ignore v tomto případě zakomentovali, test by spadl. Anotaci je možné použít na celou třídu. V tom případě se neprovede žádný test z této třídy.
Rozhraní a defaultní metody v Javě
Defaultní metody v rozhraní nám umožňují přidávat do rozhraní nové metody bez toho, abychom rozbili původní kód. Zde je jednoduchý příklad.
rozhraní MyIntf.java
public interface MyIntf {
void print(String text);
}
implementace MyIntfImpl.java
public class MyIntfImpl implements MyIntf {
@Override
public void print(String text) {
System.out.println("Printing: " + text);
}
}
Nepoužívání hvězdičkového importu v Idea IDE
V případě, že máte několik importů ze stejného balíčku, Idea IDE nahradí jednotlivé importy hvězdičkou (ve výchozím nastavení od pěti importů):
import java.util.*
Pokud vám toto chování nevyhovuje, nastavení lze změnit v Settings -> Editor -> Code Style -> Java -> záložka Imports. Zde nastavte nějaké vysoké číslo.
import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.Map;






