Integracja JSF + Facelets + Spring + JPA + Tomahawk

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Integracja JSF + Facelets + Spring + JPA + Tomahawk - Presentation Transcript

    1. Integracja JSF + Facelets + Spring + JPA + Tomahawk Wiktor Gworek 1
    2. 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
    3. Agenda • JavaServer Faces, • Facelets, • Tomahawk, • Spring, • JPA, • czy to musi być tak uciążliwe? 3
    4. JavaServer Faces [skip intro] 4
    5. Facelets 5
    6. Co dajeje nam Facelets? 6
    7. Facelets - odejście od JSP 7
    8. Facelets - odejście od JSP • JSP zostało stworzone do generowania dynamicznej treści, a nie do tworzenia drzewa komponentów 7
    9. 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
    10. 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
    11. Facelets - odejście od JSP 8
    12. Facelets - odejście od JSP • ViewHandler stworzony wyłącznie dla JSF 8
    13. Facelets - odejście od JSP • ViewHandler stworzony wyłącznie dla JSF • .xhtml zamiast .jsp 8
    14. Facelets - odejście od JSP • ViewHandler stworzony wyłącznie dla JSF • .xhtml zamiast .jsp • Szybsze niż kombinacja JSF&JSP 8
    15. Facelets - lepsze wyświetlania błędów 9
    16. Facelets - lepsze wyświetlania błędów 9
    17. Facelets - lepsze wyświetlania błędów 9
    18. Facelets - nie powiedziałem o: 10
    19. Facelets - nie powiedziałem o: • bardzo proste szablony, 10
    20. Facelets - nie powiedziałem o: • bardzo proste szablony, • widok można rozwijać na żywo, 10
    21. Facelets - nie powiedziałem o: • bardzo proste szablony, • widok można rozwijać na żywo, • wsparcie dla JSTL, 10
    22. Facelets - nie powiedziałem o: • bardzo proste szablony, • widok można rozwijać na żywo, • wsparcie dla JSTL, • łatwiejsze dodawanie nowych komponentów, 10
    23. Facelets - nie powiedziałem o: • bardzo proste szablony, • widok można rozwijać na żywo, • wsparcie dla JSTL, • łatwiejsze dodawanie nowych komponentów, • komponenty kompozycyjne. 10
    24. Facelets - konfiguracja 11
    25. Delegacja ViewHandler w faces-config.xml <view-handler> com.sun.facelets.FaceletViewHandler </view-handler> 12
    26. Zmiany w web.xml <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> 13
    27. Tomahawk 14
    28. Tomahawk 15
    29. Tomahawk 15
    30. Tomahawk • Zbiór komponentów dla JSF ze stajni Apache 15
    31. Tomahawk • Zbiór komponentów dla JSF ze stajni Apache • Dodatkowe walidatory 15
    32. Tomahawk • Zbiór komponentów dla JSF ze stajni Apache • Dodatkowe walidatory • Wszystko to, co powinno być już dawno w JSF 15
    33. 16
    34. 16
    35. 16
    36. 16
    37. 16
    38. 16
    39. 16
    40. Tomahawk - konfiguracja 17
    41. Tomahawk - konfiguracja • Wystarczy dodać tomahawk.jar :) 17
    42. Spring Framework 18
    43. Spring 19
    44. Spring • IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA... 19
    45. Spring • IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA... • Nie narzuca nam określonego modelu programowania, 19
    46. Spring • IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA... • Nie narzuca nam określonego modelu programowania, • lekki i dobrze udokumentowany, 19
    47. Spring • IoC, DI, AOP, Hollywood Principle, JEE, MVC, JTA... • Nie narzuca nam określonego modelu programowania, • lekki i dobrze udokumentowany, • łatwość testowania, rozszerzania, 19
    48. 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
    49. Na czym polega połączenie JSF i Spring? 20
    50. 21
    51. #{ziarnoPrawdy} 21
    52. #{ziarnoPrawdy} JSF standardowo sprawdza czy jest gdzieś w swoim kontekście. 21
    53. #{ziarnoPrawdy} JSF standardowo sprawdza czy jest gdzieś w swoim kontekście. jeśli nic nie znaleziono JSF deleguje jego znalezienie do Springa 21
    54. #{ziarnoPrawdy} JSF standardowo sprawdza czy jest gdzieś 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
    55. ...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
    56. czas na JPA 23
    57. czas na konkrety 23
    58. 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\") }) @Entity public class Role { @Id @GeneratedValue private Integer id; private String roleName; ... } 24
    59. 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\") }) @Entity public 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
    60. 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
    61. DAO à la Spring public 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
    62. czas na konfirgurację, czas na Springa 28
    63. Testowanie w Springu 29
    64. Testowanie w Springu • Możliwe różne konfiguracje w zależności od potrzeb, 29
    65. Testowanie w Springu • Możliwe różne konfiguracje w zależności od potrzeb, • testy też podlegają wstrzyknięciu zależności, 29
    66. 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
    67. CRUD 30
    68. CRUD list 30
    69. CRUD #{userController.createSetup} create list 30
    70. CRUD #{userController.create} #{userController.createSetup} create list 30
    71. CRUD #{userController.create} #{userController.createSetup} create #{userController.editSetup} list update 30
    72. CRUD #{userController.create} #{userController.createSetup} create #{userController.update} #{userController.editSetup} list update 30
    73. CRUD #{userController.create} #{userController.createSetup} create #{userController.update} #{userController.editSetup} list update delete #{userController.delete} 30
    74. do dzieła 31
    75. Drobne słowo o t:selectManyCheckbox 32
    76. Drobne słowo o t:selectManyCheckbox • Kiedy klasa nie jest standardowa to trzeba opakowywać w SelectItem, 32
    77. Drobne słowo o t:selectManyCheckbox • Kiedy klasa nie jest standardowa to trzeba opakowywać w SelectItem, • t:selectItem robi to za nas, 32
    78. Drobne słowo o t:selectManyCheckbox • Kiedy klasa nie jest standardowa to trzeba opakowywać w SelectItem, • t:selectItem robi to za nas, • ale i tak trzeba napisać konwerter. 32
    79. Jak można sobie pomóc? 33
    80. Jak można sobie pomóc? • Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea), 33
    81. Jak można sobie pomóc? • Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea), • AppFuse, 33
    82. Jak można sobie pomóc? • Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea), • AppFuse, • generatory Seam, 33
    83. Jak można sobie pomóc? • Wiele IDE ma wsparcie do konfigurowania projektu (NetBeans, IntelliJ Idea), • AppFuse, • generatory Seam, • pisać własne generatory, 33
    84. 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
    85. Pyt ani a? wiktor.gworek@gmail.com http://blog.mocna-kawa.com 34
    86. Pyt ani a? wiktor.gworek@gmail.com http://blog.mocna-kawa.com 34

    + wiktorwiktor, 3 years ago

    custom

    3911 views, 1 favs, 2 embeds more stats

    More info about this document

    CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

    Go to text version

    • Total Views 3911
      • 3549 on SlideShare
      • 362 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 216
    Most viewed embeds
    • 358 views on http://blog.mocna-kawa.com
    • 3 views on http://feeds.feedburner.com
    • 1 views on http://209.85.129.104

    more

    All embeds
    • 358 views on http://blog.mocna-kawa.com
    • 3 views on http://feeds.feedburner.com
    • 1 views on http://209.85.129.104

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories