рд╡реИрджреАрди рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдкрд░ рд░реИрдкрд┐рдб рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ

KPDV


рдЗрд╕ рдЖрд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдбрд┐рди 14 рдкрд░ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реИред


рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:



рдЫрд╛рдкреЛрдВ


рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдбрд┐рди 14 рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИ, рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдиреЗ рдХреЗрд╡рд▓ JavaFX, Android, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ J2ME рдкрд░ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рд╕рд╛рде рд╣реА рдлреНрд░рдВрдЯрдПрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ (HTML, CSS, JS рдХрд╛ рдореВрд▓ рдЬреНрдЮрд╛рди рдЙрдкрд▓рдмреНрдз рд╣реИ) рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдореЗрд░реАред


рддреНрдпрд╛рдЧ


рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрднреА рддрдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░реАрд▓рд┐рдВрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ, рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рд╛рдордЧреНрд░реА рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдФрд░ рдЦреБрдж рдХреЛ рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рд╣реЛрдЧрд╛ред


рдЬрд▓реНрджреА рд╢реБрд░реВ рдХрд░реЛ


рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдмрд┐рд▓рд┐рдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ:


  • рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ JPA (рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)
  • рд╡рд╛рдбрд┐рди (рд╡реЗрдм тАЛтАЛрдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП)
  • рд▓реЛрдореНрдмреЛрдХ (рдмреЙрдпрд▓рд░-рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)
  • MySQL рдбреНрд░рд╛рдЗрд╡рд░ (рдореИрдВ рд╡рд╕рдВрдд рдЖрд░рдВрдн рдореЗрдВ mariadb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдирд╣реАрдВ рд╣реИ)

Application.properties рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдЯ рдХрд░рдирд╛


рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрдирд┐рд░рд┐рдЬрд╝реНрд░ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рдЧрднрдЧ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрде, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


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 

рд╕рд╛рд╡рдзрд╛рдиреА: рдбреАрдбреАрдПрд▓-рдСрдЯреЛ

рд▓рд╛рдЗрд╡ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдпрд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрджреНрдпрддрди рдорд╛рди рдХреЗ рд╕рд╛рде ddl-auto рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
Ddl-auto рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдк:
рдмрдирд╛рдПрдВ - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВрдЧреЗ, рдкрд╣рд▓реЗ рдЯреЗрдмрд▓ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕реНрдХреАрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐)
рдорд╛рдиреНрдп рдХрд░реЗрдВ - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рдЗрдХрд╛рдИ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рддреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛
рдЕрджреНрдпрддрди - рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рддрдГ рд╣реА рдЗрдХрд╛рдИ рд╕реЗ рдХреЛрдИ рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рд╣рдЯрд╛рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ
create-drop - рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рдмрдирд╛рддрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реИ


Ddl-auto: рдЕрджреНрдпрддрди рдореВрд▓реНрдп рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рд╕рд░рд▓ рдкрддрд╛ рдкреБрд╕реНрддрд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдПрдХ рд╕рдВрдкрд░реНрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред


Contact.class
 @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; } 

рдЪрд▓реЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╕реВрдЪреА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ JPA рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп Iterable рджреЗрддрд╛ рд╣реИред

ContactRepository.class
 public interface ContactRepository extends CrudRepository<Contact, Integer> { List<Contact> findAll(); } 

рд╡рд╛рдбрд┐рди рдкрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЗрдирдкреБрдЯ, рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдлреЙрд░реНрдо рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╕рднреА рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдврд╛рдВрдЪреЗ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред


рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдореБрдЦреНрдп рдкреГрд╖реНрда ContactList рд╣реЛрдЧрд╛ред рд╣рдо AppLayout рд╕реЗ рдмрдирд╛рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдЖрдЙрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  • рдирд╡рдмрд╛рд░ (рд╣реЗрдбрд░)
  • рджрд░рд╛рдЬ (рд╕рд╛рдЗрдбрдмрд╛рд░)
  • рд╕рд╛рдордЧреНрд░реА (рд╕рд╛рдордЧреНрд░реА)
    рдЙрд╕реА рд╕рдордп, рдШрдЯрдХреЛрдВ рдХреЛ рдирд╡рдмрд╛рд░ рдФрд░ рджрд░рд╛рдЬ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдШрдЯрдХ рдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЯрд┐рдХрд▓ рд▓рдпрдЖрдЙрдЯ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╡реНрдпрд╡рд╕реНрдерд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда ManageContact рд╣реЛрдЧрд╛, рдФрд░ рд╣рдо рд╕рдВрдкрд░реНрдХ рдЖрдИрдбреА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ HasUrlParameter рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдЬрдм рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреГрд╖реНрда рдкрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд┐рд╕реА рдкреГрд╖реНрда рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ URL рдкрд░ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рд░реВрдЯ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 @Route("contacts") public class ContactList extends AppLayout {} @Route("manageContact") public class ManageContact extends AppLayout implements HasUrlParameter<Integer> {} 

рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВ


рдХреЙрдиреНрдЯреИрдХреНрдЯрд▓рд┐рд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдкрд╣рд▓реЗ рдЙрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдбреЗрдЯрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред


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

рд╕реНрд╡рдд: рдмрдВрдж (рдЕрдкрдбреЗрдЯ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ contactRepository рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ NullPointerException, PostConstruct рдПрдиреЛрдЯреЗрд╢рди рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред
Zesetup рд╕реЗ рдПрдХ рдЯрд┐рдк рдкрд░: contactRepository, рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 ContactRepository contactRepository; @Autowired public ContactList(ContactRepository contactRepository){ this.contactRepository = contactRepository; 

рдорд╛рд░реНрд╕реЗрд▓рдЧ рд╕реЗ рдПрдХ рдЯрд┐рдк рдХреЗ рд░реВрдк рдореЗрдВ: рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг 4.3 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ рдСрдЯреЛрд╡реЗрдб рдПрдиреЛрдЯреЗрд╢рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИред


рдХрдВрдЯреЗрдВрдЯ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЯрд┐рдХрд▓ рд▓рд╛рдЗрдСрдЯ рдШрдЯрдХ рдХреЛ рдХреЙрдиреНрдЯреЗрдХреНрдЯрд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЯреЗрдмрд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд░рд╛рдЙрдЯрд░рд▓рд┐рдВрдХ (рд╕рдВрдкрд░реНрдХ рдирд┐рд░реНрдорд╛рдг рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдЧреНрд░рд┐рдб рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ ред рдЧреНрд░рд┐рдб рдХреЛ рд╕рдВрдкрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рд╕реВрдЪреА рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░ рд╕рдХреЗрдВ рдФрд░ рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдКрдкрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдЬрдм setItems () рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ;


 Grid<Contact> grid; public ContactList(){ grid = new Grid<>(); //      grid = new Grid<>(Contact.class); //      ,       } 

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрддрдВрдн рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдпрд╣ рдХреЙрд▓рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд╛рдпрдХ рд╣реИред


рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ contactRepository рд╕реЗ рдбреЗрдЯрд╛ рдорд┐рд▓реЗрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо PostConstruct рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗ


FillGrid рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рднрд░рдирд╛ ()
  @PostConstruct public void fillGrid(){ List<Contact> contacts = contactRepository.findAll(); if (!contacts.isEmpty()){ //     grid.addColumn(Contact::getFirstName).setHeader(""); grid.addColumn(Contact::getSecondName).setHeader(""); grid.addColumn(Contact::getFatherName).setHeader(""); grid.addColumn(Contact::getNumberPhone).setHeader(""); grid.addColumn(Contact::getEmail).setHeader("E-mail"); //     grid.addColumn(new NativeButtonRenderer<Contact>("", contact -> { UI.getCurrent().navigate(ManageContact.class,contact.getId()); })); grid.addColumn(new NativeButtonRenderer<Contact>("", contact -> { Dialog dialog = new Dialog(); Button confirm = new Button(""); Button cancel = new Button(""); dialog.add("     ?"); dialog.add(confirm); dialog.add(cancel); confirm.addClickListener(clickEvent -> { contactRepository.delete(contact); dialog.close(); Notification notification = new Notification(" ",1000); notification.setPosition(Notification.Position.MIDDLE); notification.open(); grid.setItems(contactRepository.findAll()); }); cancel.addClickListener(clickEvent -> { dialog.close(); }); dialog.open(); })); grid.setItems(contacts); } } 

NativeButtonRenderer рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдбрд┐рдЯ рдФрд░ рдбрд┐рд▓реАрдЯ рдмрдЯрди рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдмрдЯрди рдХрд╛ рдирд╛рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ред


 grid.addColumn(new NativeButtonRenderer<Contact>("", contact -> { //DO SOMETHING })); grid.addColumn(new NativeButtonRenderer<Contact>("", new ClickableRenderer.ItemClickListener<Contact>() { @Override public void onItemClicked(Contact contact) { //DO SOMETHING }})); 

рдкрд░рд┐рдгрд╛рдо

рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА


рд╕рдВрдкрд░реНрдХ рд╕рдВрдкрд╛рджрди рдкреГрд╖реНрда рдмрдирд╛рдирд╛


рд╕рдВрдкрд░реНрдХ рд╕рдВрдкрд╛рджрд┐рдд рдкреГрд╖реНрда рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрдкрд░реНрдХ рдЖрдИрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реЗрдЯрдкреИрд░рдореАрдЯрд░ () рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  @Override public void setParameter(BeforeEvent beforeEvent, Integer contactId) { id = contactId; if (!id.equals(0)){ addToNavbar(new H3(" ")); } else { addToNavbar(new H3(" ")); } fillForm(); //  } 

рдШрдЯрдХ рдЬреЛрдбрд╝рдирд╛ рдХреЙрдиреНрдЯреИрдХреНрдЯрд▓рд┐рд╕реНрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╡рд░реНрдЯрд┐рдХрд▓ рд▓рдпрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕реЗ рд░реВрдкреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдорд▓рд╛рдпрдЯ рд╡рд┐рд╢реЗрд╖ рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рдкреЛрд╕реНрдЯрдХреЙрд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдлрд╝реЙрд░реНрдо рднрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди URL рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирдВрдмрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрдпреЛрдВрдХрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛: рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ -> @PostConstruct -> рдУрд╡рд░рд░рд╛рдЗрдб


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(){ //    contactForm = new FormLayout(); firstName = new TextField(""); secondName = new TextField(""); fatherName = new TextField(""); numberPhone = new TextField(" "); email = new TextField(" "); saveContact = new Button(""); //     contactForm.add(firstName, secondName,fatherName,numberPhone,email,saveContact); setContent(contactForm); } @Override public void setParameter(BeforeEvent beforeEvent, Integer contactId) { id = contactId; if (!id.equals(0)){ addToNavbar(new H3(" ")); } else { addToNavbar(new H3(" ")); } fillForm(); } public void fillForm(){ if (!id.equals(0)){ Optional<Contact> contact = contactRepository.findById(id); contact.ifPresent(x -> { firstName.setValue(x.getFirstName()); secondName.setValue(x.getSecondName()); fatherName.setValue(x.getFatherName()); numberPhone.setValue(x.getNumberPhone()); email.setValue(x.getEmail()); }); } saveContact.addClickListener(clickEvent->{ //       Contact contact = new Contact(); if (!id.equals(0)){ contact.setId(id); } contact.setFirstName(firstName.getValue()); contact.setSecondName(secondName.getValue()); contact.setFatherName(fatherName.getValue()); contact.setEmail(email.getValue()); contact.setNumberPhone(numberPhone.getValue()); contactRepository.save(contact); Notification notification = new Notification(id.equals(0)? "  ":"  ",1000); notification.setPosition(Notification.Position.MIDDLE); notification.addDetachListener(detachEvent -> { UI.getCurrent().navigate(ContactList.class); }); contactForm.setEnabled(false); notification.open(); }); } } 

рдкрд░рд┐рдгрд╛рдо

рд╕рдВрдкрд░реНрдХ рд╕рдВрдкрд╛рджрди


рдкрд░рд┐рдгрд╛рдо: рд╡рд╛рдбрд┐рди 14 рд╕рд░рд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдврд╛рдВрдЪрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╕рд╛рдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрдкреВрд░реНрдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдЪрдЯреАрдПрдордПрд▓ 5 + рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдпрд╣ рдврд╛рдВрдЪрд╛ рдЙрди рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдП рдмрд┐рдирд╛ рдХреИрд╕реЗ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рдВрдмреЗ xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдмрдЪреЗрдВ, рдФрд░ рдХрд┐рддрдиреА рдЬрд▓реНрджреА рдЖрдк рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рдХреЛ рд╡рд╕рдВрдд рдврд╛рдВрдЪреЗ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░


рд▓реЗрдЦ рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рдФрд░ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╕рдВрднрд╡ рд╣реИрдВ, рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░, рдХреГрдкрдпрд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрдВ рднреЗрдЬреЗрдВ

Source: https://habr.com/ru/post/hi480852/


All Articles