
Tujuan artikel ini adalah untuk mensistematisasikan proses pengembangan aplikasi web pada Vaadin 14 menggunakan Spring Boot.
Sebelum membaca artikel ini, saya sarankan membaca materi berikut:
Tayangan
Vaadin 14 adalah alat yang agak nyaman untuk merancang aplikasi web, sebelum bertemu, itu mengembangkan antarmuka grafis hanya di JavaFX, Android, dan bahkan J2ME, dan pada saat yang sama menghindari pengembangan frontend (pengetahuan dasar tentang HTML, CSS, JS tersedia) karena tidak berpikir milikku
Penafian
Mereka yang belum bekerja dengan Spring Boot merekomendasikan untuk melewatkan awal yang cepat menggunakan Spring Initializr, kembali ke materi yang direkomendasikan, dan mencoba mengkonfigurasi semuanya sendiri, setelah menemukan banyak masalah yang berbeda, jika tidak di masa depan akan ada kesenjangan dalam memahami berbagai hal.
Mulai cepat
Buat proyek untuk aplikasi web kami menggunakan Spring Initializr , dependensi yang diperlukan untuk aplikasi web kecil kami:
- Spring Data JPA (untuk bekerja dengan database)
- Vaadin (untuk pengembangan aplikasi web)
- Lombok (untuk mengurangi kode pelat-ketel)
- Driver MySQL (saya menggunakan mariadb, pada musim semi initializr'e bukan)
Pengaturan application.properties dan database
Proyek yang dibuat pada Spring Initializr hampir siap dijalankan, kita hanya perlu mengkonfigurasi application.properties dengan menentukan jalur basis data, nama pengguna dan kata sandi
spring.datasource.url = jdbc:mariadb://127.0.0.1:3306/test spring.datasource.username=user spring.datasource.password=password spring.jpa.hibernate.ddl-auto=update
Perhatian: ddl-autoJangan gunakan ddl-auto dengan nilai pembaruan pada database langsung atau ketika mengembangkan proyek, karena secara otomatis memperbarui skema database.
Opsi yang ada untuk ddl-auto:
create - akan membuat tabel dalam database, setelah sebelumnya menghapus versi tabel yang lama (kehilangan data jika terjadi perubahan skema)
validate - memeriksa tabel dalam database, jika tidak cocok dengan entitas maka hibernate akan memunculkan eksepsi
perbarui - periksa tabel, dan perbarui secara otomatis tanpa menghapus bidang yang tidak ada dari entitas
create-drop - memeriksa tabel, membuat atau memperbaruinya, dan kemudian menghapusnya, dimaksudkan untuk pengujian unit
Dengan set nilai ddl-auto: update, hibernate secara otomatis membuat tabel dalam database berdasarkan esensi kami, karena kami membuat buku alamat sederhana kemudian membuat kelas kontak.
Hubungi.kelas @Entity(name = "Contacts") @Getter @Setter @EqualsAndHashCode public class Contact { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String firstName; private String secondName; private String fatherName; private String numberPhone; private String email; }
Mari kita buat antarmuka untuk bekerja dengan database, dan menambahkan metode yang mengembalikan daftar sejak itu Spring Data JPA secara default mengembalikan Iterable, bukan List.
ContactRepository.class public interface ContactRepository extends CrudRepository<Contact, Integer> { List<Contact> findAll(); }
Pengembangan antarmuka pada Vaadin mencakup penambahan komponen input, visualisasi, dan formulir interaksi ke objek tata letak untuk penentuan posisi elemen yang diperlukan. Daftar semua komponen dapat ditemukan di situs web resmi kerangka kerja.
Halaman utama aplikasi kita adalah ContactList. Kami akan mewarisi semua objek halaman yang dibuat dari AppLayout - ini adalah tata letak khas aplikasi web yang terdiri dari:
- Navbar (header)
- Laci (bilah sisi)
- Konten
Pada saat yang sama, komponen ditambahkan ke Navbar dan Drawer, dan komponen diatur ke Konten sebagai Konten, misalnya, VerticalLayout di mana elemen pengguna akan ditempatkan dalam pengaturan vertikal.
Halaman untuk mengedit dan membuat kontak akan menjadi ManageContact, dan kami akan mengimplementasikan antarmuka HasUrlParameter di dalamnya untuk mentransfer id kontak, ketika antarmuka ini dihidupkan, parameter harus diteruskan ke halaman.
Untuk mengikat halaman ke URL tertentu, anotasi Rute digunakan:
@Route("contacts") public class ContactList extends AppLayout {} @Route("manageContact") public class ManageContact extends AppLayout implements HasUrlParameter<Integer> {}
Buat daftar kontak
Di konstruktor objek ContactList, tentukan komponen yang digunakan dengan terlebih dahulu menjadikannya bidang objek. Karena data akan diambil dari database, perlu untuk menghubungkan repositori ke bidang objek.
@Route("contacts") public class ContactList extends AppLayout { VerticalLayout layout; Grid<Contact> grid; RouterLink linkCreate; @Autowired ContactRepository contactRepository; public ContactList(){ layout = new VerticalLayout(); grid = new Grid<>(); linkCreate = new RouterLink(" ",ManageContact.class,0); layout.add(linkCreate); layout.add(grid); addToNavbar(new H3(" ")); setContent(layout); } }
Tentang Autowired (diperbarui)Jangan mencoba mengakses contactRepository dari konstruktor suatu objek, ini pasti akan menyebabkan NullPointerException, akses dari metode dengan anotasi PostConstruct, atau metode dari objek yang sudah dibuat.
Pada kiat dari zesetup : contactRepository, Anda dapat menyuntikkan melalui konstruktor:
ContactRepository contactRepository; @Autowired public ContactList(ContactRepository contactRepository){ this.contactRepository = contactRepository;
Sebagai tip dari markellg : Perlu dicatat bahwa ketika menggunakan Spring versi 4.3 dan lebih tinggi, anotasi Autowired pada konstruktor adalah opsional jika kelas berisi konstruktor tunggal.
Komponen VerticalLayout telah ditambahkan ke kelas ContactList untuk pengaturan vertikal elemen dalam konten, kami akan menambahkan RouterLink ke dalamnya (untuk pergi ke halaman pembuatan kontak) dan Grid untuk menampilkan tabel. Kotak diketik oleh objek Kontak sehingga kita dapat memuat data dari daftar dan mereka secara otomatis menarik ketika metode setItems () dipanggil;
Grid<Contact> grid; public ContactList(){ grid = new Grid<>();
Perilaku pembuatan kolom otomatis tidak menarik bagi kami, karena dalam kerangka artikel ini, ada baiknya menampilkan penambahan kolom, dan tampilan tombol untuk menghapus atau mengedit kontak.
Untuk mengisi tabel, kita akan mendapatkan data dari contactRepository, untuk ini kita akan membuat metode dengan anotasi PostConstruct
Mengisi tabel dengan fillGrid () @PostConstruct public void fillGrid(){ List<Contact> contacts = contactRepository.findAll(); if (!contacts.isEmpty()){
NativeButtonRenderer digunakan untuk menambahkan kolom dengan tombol edit dan hapus, kami meneruskan nama tombol ke argumen konstruktor, dan penangan klik tombol.
grid.addColumn(new NativeButtonRenderer<Contact>("", contact -> {
Membuat halaman edit kontak
Halaman edit kontak menerima parameter sebagai id kontak, jadi kita perlu mengimplementasikan metode setParameter ():
@Override public void setParameter(BeforeEvent beforeEvent, Integer contactId) { id = contactId; if (!id.equals(0)){ addToNavbar(new H3(" ")); } else { addToNavbar(new H3(" ")); } fillForm();
Menambahkan komponen mirip dengan ContactList, hanya dalam hal ini kami tidak menggunakan VerticalLayout, tetapi menggunakan markup khusus FormLayout untuk menampilkan formulir tersebut. Kami mengisi formulir dengan data tidak lagi menggunakan metode dengan anotasi PostConstruct, tetapi setelah mendapatkan nomor kontak dari URL, karena rantai: konstruktor objek -> @PostConstruct -> Override
Managecontact.class @Route("manageContact") public class ManageContact extends AppLayout implements HasUrlParameter<Integer> { Integer id; FormLayout contactForm; TextField firstName; TextField secondName; TextField fatherName; TextField numberPhone; TextField email; Button saveContact; @Autowired ContactRepository contactRepository; public ManageContact(){
Hasil: Vaadin 14 adalah kerangka kerja yang agak nyaman untuk membuat aplikasi web sederhana, dengan menggunakannya Anda dapat dengan cepat membuat aplikasi dengan hanya pengetahuan Java di bagasi, dan itu akan berfungsi. Namun sayangnya, seluruh antarmuka dibuat di sisi server dan sumber daya jauh lebih diperlukan daripada menggunakan HTML5 + JS. Kerangka kerja ini lebih cocok untuk proyek-proyek kecil yang perlu dilakukan dengan cepat tanpa mempelajari teknologi front-end.
Artikel ini menunjukkan bagaimana Anda dapat dengan cepat dan mudah membuat aplikasi web tanpa mendesain database sebelumnya, menghindari konfigurasi xml yang panjang, dan seberapa cepat Anda dapat mengembangkan antarmuka web. Untuk sebagian besar, Spring Boot dan Spring Data JPA membuat hidup lebih mudah bagi pengembang dan menyederhanakan pengembangan. Artikel ini tidak akan mengungkapkan hal baru kepada pengembang yang sudah mapan, tetapi akan membantu pemula untuk mulai menguasai kerangka Spring.
Repositori dengan proyek
Kesalahan tata bahasa dan tanda baca dimungkinkan dalam artikel, setelah terdeteksi, silakan kirim secara pribadi