Struts 2 - Motywy i szablony
Zanim zaczniemy właściwy tutorial do tego rozdziału, przyjrzyjmy się kilku definicjom podanym przez https://struts.apache.org-
Sr.No | Termin i opis |
---|---|
1 | TAG Mały fragment kodu wykonywany z poziomu JSP, FreeMarker lub Velocity. |
2 | TEMPLATE Fragment kodu, zwykle napisany we FreeMarker, który może być renderowany przez określone tagi (tagi HTML). |
3 | THEME Zbiór szablonów spakowanych razem, aby zapewnić wspólną funkcjonalność. |
Sugerowałbym również przejrzenie rozdziału Lokalizacja Struts2, ponieważ weźmiemy ten sam przykład jeszcze raz, aby wykonać nasze ćwiczenie.
Kiedy używasz Struts 2tag, taki jak <s: submit ...>, <s: textfield ...> itp. na swojej stronie internetowej, framework Struts 2 generuje kod HTML ze wstępnie skonfigurowanym stylem i układem. Struts 2 zawiera trzy wbudowane motywy -
Sr.No | Motyw i opis |
---|---|
1 | SIMPLE theme Minimalistyczny motyw bez „dzwonków i gwizdków”. Na przykład tag textfield renderuje tag HTML <input /> bez etykiety, walidacji, raportowania błędów ani żadnego innego formatowania czy funkcji. |
2 | XHTML theme Jest to domyślny motyw używany w Struts 2 i zapewnia wszystkie podstawowe funkcje, które zapewnia prosty motyw i dodaje kilka funkcji, takich jak standardowy układ dwukolumnowej tabeli dla kodu HTML, etykiety dla każdego kodu HTML, walidacja i raportowanie błędów itp. |
3 | CSS_XHTML theme Ten motyw zapewnia wszystkie podstawy, które zapewnia prosty motyw i dodaje kilka funkcji, takich jak standardowy dwukolumnowy układ oparty na CSS, używając <div> dla tagów HTML Struts, etykiet dla każdego z tagów HTML Struts, umieszczonych zgodnie z arkuszem stylów CSS . |
Jak wspomniano powyżej, jeśli nie określisz motywu, Struts 2 użyje domyślnie motywu xhtml. Na przykład ten znacznik wyboru Struts 2 -
<s:textfield name = "name" label = "Name" />
generuje następujące znaczniki HTML -
<tr>
<td class="tdLabel">
<label for = "empinfo_name" class="label">Name:</label>
</td>
<td>
<input type = "text" name = "name" value = "" id = "empinfo_name"/>
</td>
</tr>
Tutaj empinfo to nazwa działania zdefiniowana w pliku struts.xml.
Wybieranie motywów
Możesz określić motyw zgodnie z Struts 2, na podstawie tagów lub możesz użyć jednej z następujących metod, aby określić, jakiego motywu ma używać Struts 2 -
Atrybut motywu na określonym znaczniku
Atrybut motywu na otaczającym znacznik znaczniku formularza
Atrybut o zakresie strony o nazwie „theme”
Atrybut w zakresie żądania o nazwie „theme”
Atrybut o zasięgu sesji o nazwie „theme”
Atrybut w zakresie aplikacji o nazwie „theme”
Właściwość struts.ui.theme w struts.properties (domyślnie xhtml)
Poniżej znajduje się składnia służąca do określania ich na poziomie tagu, jeśli chcesz używać różnych motywów dla różnych tagów -
<s:textfield name = "name" label = "Name" theme="xhtml"/>
Ponieważ używanie motywów na podstawie tagów nie jest zbyt praktyczne, więc możemy po prostu określić regułę w struts.properties plik przy użyciu następujących tagów -
# Standard UI theme
struts.ui.theme = xhtml
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix = ftl
Oto wynik, który uzyskaliśmy z rozdziału dotyczącego lokalizacji, w którym użyliśmy domyślnego motywu z ustawieniem struts.ui.theme = xhtml w struts-default.properties domyślny plik struts2-core.xy.z.jar.
Jak działa motyw?
Dla danego motywu każdy znacznik Struts ma powiązany szablon, np. s:textfield → text.ftl i s:password → password.ftl itp.
Te pliki szablonów są spakowane w pliku struts2-core.xy.z.jar. Te pliki szablonów zachowują wstępnie zdefiniowany układ HTML dla każdego znacznika.
W ten sposób, Struts 2 Framework generuje ostateczny kod HTML przy użyciu tagów Sturts i powiązanych szablonów.
Struts 2 tags + Associated template file = Final HTML markup code.
Domyślne szablony są napisane we FreeMarker i mają rozszerzenie .ftl.
Możesz również zaprojektować swoje szablony za pomocą velocity lub JSP i odpowiednio ustawić konfigurację w struts.properties za pomocą struts.ui.templateSuffix i struts.ui.templateDir.
Tworzenie nowych motywów
Najprostszym sposobem utworzenia nowego motywu jest skopiowanie dowolnego z istniejących plików motywu / szablonu i dokonanie wymaganych modyfikacji.
Zacznijmy od stworzenia folderu o nazwie templatew WebContent / WEBINF / classes i podfolderze z nazwą naszego nowego motywu. Na przykład WebContent / WEB-INF / classes / template / mytheme .
W tym miejscu możesz rozpocząć tworzenie szablonów od zera lub możesz również skopiować szablony z pliku Struts2 distribution gdzie możesz je zmodyfikować zgodnie z wymaganiami w przyszłości.
Zamierzamy zmodyfikować istniejący domyślny szablon xhtmldo celów edukacyjnych. Teraz skopiujmy zawartość z struts2-core-xyzjar / template / xhtml do naszego katalogu z motywami i zmodyfikujmy tylko plik WebContent / WEBINF / classes / template / mytheme / control .ftl. Kiedy otworzymy plik control.ftl, który będzie miał następujące wiersze -
<table class="${parameters.cssClass?default('wwFormTable')?html}"<#rt/>
<#if parameters.cssStyle??> style="${parameters.cssStyle?html}"<#rt/>
</#if>
>
Zmieńmy powyższy plik control.ftl mieć następującą zawartość -
<table style = "border:1px solid black;">
Jeśli sprawdzisz form.ftl wtedy to znajdziesz control.ftljest używany w tym pliku, ale form.ftl odwołuje się do tego pliku z motywu xhtml. Więc zmieńmy to w następujący sposób -
<#include "/${parameters.templateDir}/xhtml/form-validate.ftl" />
<#include "/${parameters.templateDir}/simple/form-common.ftl" />
<#if (parameters.validate?default(false))>
onreset = "${parameters.onreset?default('clearErrorMessages(this);\
clearErrorLabels(this);')}"
<#else>
<#if parameters.onreset??>
onreset="${parameters.onreset?html}"
</#if>
</#if>
#include "/${parameters.templateDir}/mytheme/control.ftl" />
Zakładam, że nie miałbyś zbyt wiele zrozumienia FreeMarker języka szablonów, nadal możesz zorientować się, co należy zrobić, patrząc na pliki .ftl.
Zapiszmy jednak powyższe zmiany i wróćmy do naszego przykładu lokalizacji i utwórzmy plik WebContent/WEB-INF/classes/struts.properties plik z następującą zawartością
# Customized them
struts.ui.theme = mytheme
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the template type to ftl.
struts.ui.templateSuffix = ftl
Teraz po tej zmianie kliknij prawym przyciskiem myszy nazwę projektu i kliknij Export > WAR Fileaby utworzyć plik wojny. Następnie wdróż tę WAR w katalogu webapps serwera Tomcat. Na koniec uruchom serwer Tomcat i spróbuj uzyskać dostęp do adresu URLhttp://localhost:8080/HelloWorldStruts2. Spowoduje to wyświetlenie następującego ekranu -
Możesz zobaczyć obramowanie wokół komponentu formularza, które jest wynikiem zmiany, którą wprowadziliśmy w naszym motywie po skopiowaniu go z motywu xhtml. Jeśli włożysz niewielki wysiłek w naukę FreeMarkera, będziesz mógł bardzo łatwo tworzyć lub modyfikować swoje motywy.
Mam nadzieję, że teraz masz podstawowe zrozumienie Sturts 2 motywy i szablony, prawda?