integracja jsf + facelets + spring + jpa + tomahawk
TRANSCRIPT
![Page 1: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/1.jpg)
Integracja JSF + Facelets + Spring + JPA
+ Tomahawk
Wiktor Gworek
1
![Page 2: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/2.jpg)
O mnie
• Student V roku na MIMUWie
• Od dwóch lat związany z Javą
• Ciąglę się uczę nowych technologii
• Prowadzę blog Mocna Kawa (blog.mocna-kawa.com)
2
![Page 3: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/3.jpg)
Agenda
• JavaServer Faces,
• Facelets,
• Tomahawk,
• Spring,
• JPA,
• czy to musi być tak uciążliwe?
3
![Page 4: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/4.jpg)
JavaServer Faces
[skip intro]
4
![Page 5: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/5.jpg)
Facelets
5
![Page 6: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/6.jpg)
Co dajeje nam Facelets?
6
![Page 7: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/7.jpg)
Facelets - odejście od JSP
7
![Page 8: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/8.jpg)
Facelets - odejście od JSP
• JSP zostało stworzone do generowania dynamicznej treści, a nie do tworzenia drzewa komponentów
7
![Page 9: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/9.jpg)
Facelets - odejście od JSP
• JSP zostało stworzone do generowania dynamicznej treści, a nie do tworzenia drzewa komponentów
• Dwa różne cykle życia
7
![Page 10: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/10.jpg)
Facelets - odejście od JSP
• JSP zostało stworzone do generowania dynamicznej treści, a nie do tworzenia drzewa komponentów
• Dwa różne cykle życia
• Content Interweaving issues
7
![Page 11: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/11.jpg)
Facelets - odejście od JSP
8
![Page 12: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/12.jpg)
Facelets - odejście od JSP
• ViewHandler stworzony wyłącznie dla JSF
8
![Page 13: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/13.jpg)
Facelets - odejście od JSP
• ViewHandler stworzony wyłącznie dla JSF
• .xhtml zamiast .jsp
8
![Page 14: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/14.jpg)
Facelets - odejście od JSP
• ViewHandler stworzony wyłącznie dla JSF
• .xhtml zamiast .jsp
• Szybsze niż kombinacja JSF&JSP
8
![Page 15: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/15.jpg)
Facelets - lepsze wyświetlania błędów
9
![Page 16: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/16.jpg)
Facelets - lepsze wyświetlania błędów
9
![Page 17: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/17.jpg)
Facelets - lepsze wyświetlania błędów
9
![Page 18: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/18.jpg)
Facelets - nie powiedziałem o:
10
![Page 19: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/19.jpg)
• bardzo proste szablony,
Facelets - nie powiedziałem o:
10
![Page 20: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/20.jpg)
• bardzo proste szablony,
• widok można rozwijać na żywo,
Facelets - nie powiedziałem o:
10
![Page 21: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/21.jpg)
• bardzo proste szablony,
• widok można rozwijać na żywo,
• wsparcie dla JSTL,
Facelets - nie powiedziałem o:
10
![Page 22: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/22.jpg)
• bardzo proste szablony,
• widok można rozwijać na żywo,
• wsparcie dla JSTL,
• łatwiejsze dodawanie nowych komponentów,
Facelets - nie powiedziałem o:
10
![Page 23: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/23.jpg)
• bardzo proste szablony,
• widok można rozwijać na żywo,
• wsparcie dla JSTL,
• łatwiejsze dodawanie nowych komponentów,
• komponenty kompozycyjne.
Facelets - nie powiedziałem o:
10
![Page 24: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/24.jpg)
Facelets - konfiguracja
11
![Page 25: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/25.jpg)
Delegacja ViewHandlerw faces-config.xml
<view-handler> com.sun.facelets.FaceletViewHandler </view-handler>
12
![Page 26: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/26.jpg)
<context-param> <param-name> facelets.REFRESH_PERIOD </param-name> <param-value> 2 </param-value></context-param> <context-param> <param-name> facelets.DEVELOPMENT </param-name> <param-value> true </param-value></context-param>
<context-param> <param-name> javax.faces.DEFAULT_SUFFIX </param-name> <param-value> .xhtml </param-value></context-param>
Zmiany w web.xml
13
![Page 27: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/27.jpg)
Tomahawk
14
![Page 28: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/28.jpg)
Tomahawk
15
![Page 29: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/29.jpg)
Tomahawk
15
![Page 30: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/30.jpg)
Tomahawk
• Zbiór komponentów dla JSF ze stajni Apache
15
![Page 31: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/31.jpg)
Tomahawk
• Zbiór komponentów dla JSF ze stajni Apache
• Dodatkowe walidatory
15
![Page 32: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/32.jpg)
Tomahawk
• Zbiór komponentów dla JSF ze stajni Apache
• Dodatkowe walidatory
• Wszystko to, co powinno być już dawno w JSF
15
![Page 33: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/33.jpg)
16
![Page 34: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/34.jpg)
16
![Page 35: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/35.jpg)
16
![Page 36: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/36.jpg)
16
![Page 37: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/37.jpg)
16
![Page 38: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/38.jpg)
16
![Page 39: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/39.jpg)
16
![Page 40: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/40.jpg)
Tomahawk - konfiguracja
17
![Page 41: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/41.jpg)
Tomahawk - konfiguracja
• Wystarczy dodać tomahawk.jar :)
17
![Page 42: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/42.jpg)
Spring Framework
18
![Page 43: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/43.jpg)
Spring
19
![Page 44: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/44.jpg)
Spring
• IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA...
19
![Page 45: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/45.jpg)
Spring
• IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA...
• Nie narzuca nam określonego modelu programowania,
19
![Page 46: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/46.jpg)
Spring
• IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA...
• Nie narzuca nam określonego modelu programowania,
• lekki i dobrze udokumentowany,
19
![Page 47: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/47.jpg)
Spring
• IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA...
• Nie narzuca nam określonego modelu programowania,
• lekki i dobrze udokumentowany,
• łatwość testowania, rozszerzania,
19
![Page 48: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/48.jpg)
Spring
• IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA...
• Nie narzuca nam określonego modelu programowania,
• lekki i dobrze udokumentowany,
• łatwość testowania, rozszerzania,
• daje dość dużą radość.
19
![Page 49: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/49.jpg)
Na czym polega połączenie JSF i Spring?
20
![Page 50: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/50.jpg)
21
![Page 51: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/51.jpg)
#{ziarnoPrawdy}
21
![Page 52: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/52.jpg)
#{ziarnoPrawdy}
JSF standardowo sprawdza czy jestgdzieś w swoim kontekście.
21
![Page 53: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/53.jpg)
#{ziarnoPrawdy}
JSF standardowo sprawdza czy jestgdzieś w swoim kontekście.
jeśli nic nie znaleziono
JSF deleguje jego znalezienie do Springa
21
![Page 54: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/54.jpg)
#{ziarnoPrawdy}
JSF standardowo sprawdza czy jestgdzieś w swoim kontekście.
jeśli nic nie znaleziono
JSF deleguje jego znalezienie do Springa
<variable-resolver> org.springframework.web.jsf.DelegatingVariableResolver </variable-resolver>
21
![Page 55: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/55.jpg)
...i jeszcze drobne zmiany w web.xml
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener>
<context-param> <param-name> contextConfigLocation </param-name> <param-value> /WEB-INF/applicationContext*.xml </param-value></context-param>
<filter> <filter-name> RequestContextFilter </filter-name> <filter-class> org.springframework.web.filter.RequestContextFilter </filter-class></filter>
<filter-mapping> <filter-name> RequestContextFilter </filter-name> <url-pattern> *.jsf </url-pattern></filter-mapping>
22
![Page 56: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/56.jpg)
czas na JPA
23
![Page 57: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/57.jpg)
czas na konkrety
23
![Page 58: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/58.jpg)
Model - Role@NamedQueries({@NamedQuery(name = "Role.findAll", query = "SELECT role FROM Role role"),@NamedQuery(name = "Role.findByRoleName", query = "SELECT role FROM Role role WHERE role.roleName = :roleName") })@Entitypublic class Role {
@Id @GeneratedValue private Integer id;
private String roleName; ...}
24
![Page 59: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/59.jpg)
Model - User@NamedQueries({@NamedQuery(name = "User.findAll", query = "SELECT user FROM User user"),@NamedQuery(name = "User.findByLogin", query = "SELECT user FROM User user WHERE user.login = :login") })@Entitypublic class User {
@Id @GeneratedValue private Integer id;
private String login; private String password;
@OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.EAGER) private List<Role> roles; ...}
25
![Page 60: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/60.jpg)
DAO
public interface RoleDao { public List<Role> findAll(); public Role findById(Integer id); public Role findByRoleName(String roleName); public void save(Role role); public void delete(Role role); }
26
![Page 61: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/61.jpg)
DAO à la Springpublic class JpaRoleDao extends JpaDaoSupport implements RoleDao {
public List<Role> findAll() { return getJpaTemplate().findByNamedQuery("Role.findAll"); }
public Role findById(Integer id) { return getJpaTemplate().find(Role.class, id); }
public void save(Role role) { getJpaTemplate().merge(role); }
public void delete(Role role) { getJpaTemplate().remove(getJpaTemplate().merge(role)); } }
27
![Page 62: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/62.jpg)
czas na konfirgurację,czas na Springa
28
![Page 63: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/63.jpg)
Testowanie w Springu
29
![Page 64: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/64.jpg)
Testowanie w Springu
• Możliwe różne konfiguracje w zależności od potrzeb,
29
![Page 65: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/65.jpg)
Testowanie w Springu
• Możliwe różne konfiguracje w zależności od potrzeb,
• testy też podlegają wstrzyknięciu zależności,
29
![Page 66: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/66.jpg)
Testowanie w Springu
• Możliwe różne konfiguracje w zależności od potrzeb,
• testy też podlegają wstrzyknięciu zależności,
• dla JPA mamy użyteczną klasę AbstractJpaTests.
29
![Page 67: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/67.jpg)
CRUD
30
![Page 68: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/68.jpg)
CRUD
list
30
![Page 69: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/69.jpg)
#{userController.createSetup}create
CRUD
list
30
![Page 70: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/70.jpg)
#{userController.createSetup}create
CRUD
list
#{userController.create}
30
![Page 71: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/71.jpg)
#{userController.createSetup}create
#{userController.editSetup} update
CRUD
list
#{userController.create}
30
![Page 72: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/72.jpg)
#{userController.createSetup}create
#{userController.editSetup} update
CRUD
list
#{userController.create}
#{userController.update}
30
![Page 73: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/73.jpg)
#{userController.delete} delete
#{userController.createSetup}create
#{userController.editSetup} update
CRUD
list
#{userController.create}
#{userController.update}
30
![Page 74: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/74.jpg)
do dzieła
31
![Page 75: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/75.jpg)
Drobne słowo ot:selectManyCheckbox
32
![Page 76: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/76.jpg)
Drobne słowo ot:selectManyCheckbox
• Kiedy klasa nie jest standardowa to trzeba opakowywać w SelectItem,
32
![Page 77: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/77.jpg)
Drobne słowo ot:selectManyCheckbox
• Kiedy klasa nie jest standardowa to trzeba opakowywać w SelectItem,
• t:selectItem robi to za nas,
32
![Page 78: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/78.jpg)
Drobne słowo ot:selectManyCheckbox
• Kiedy klasa nie jest standardowa to trzeba opakowywać w SelectItem,
• t:selectItem robi to za nas,
• ale i tak trzeba napisać konwerter.
32
![Page 79: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/79.jpg)
Jak można sobie pomóc?
33
![Page 80: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/80.jpg)
Jak można sobie pomóc?
• Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea),
33
![Page 81: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/81.jpg)
Jak można sobie pomóc?
• Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea),
• AppFuse,
33
![Page 82: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/82.jpg)
Jak można sobie pomóc?
• Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea),
• AppFuse,
• generatory Seam,
33
![Page 83: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/83.jpg)
Jak można sobie pomóc?
• Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea),
• AppFuse,
• generatory Seam,
• pisać własne generatory,
33
![Page 84: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/84.jpg)
Jak można sobie pomóc?
• Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea),
• AppFuse,
• generatory Seam,
• pisać własne generatory,
• “Great frameworks are extracted, not created”.
33
![Page 85: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/85.jpg)
Pytania?
http://blog.mocna-kawa.com
34
![Page 86: Integracja JSF + Facelets + Spring + JPA + Tomahawk](https://reader031.vdocuments.mx/reader031/viewer/2022012916/55625390d8b42aa52d8b523f/html5/thumbnails/86.jpg)
Pytania?
http://blog.mocna-kawa.com
34