Java HTML View Engine с главни шаблони и подизгледи

Отчаяно търся машина за изглед на Java HTML, която да отговаря на три основни изисквания:

  1. Поддръжка за главни шаблонни страници.
  2. HTML шаблоните могат да се използват като подизгледи в други шаблони.
  3. HTML шаблоните не трябва да бъдат подкрепени от конфигурационни файлове или Java класове.

Това е за уеб приложение на Java, което се състои главно от страница само за четене и няколко страници с формуляри. Най-вероятно ще го използвам в комбинация с MVC рамка.

Главни шаблонни страници

Основната структура на HTML трябва да бъде дефинирана от основна HTML страница. Различните страници просто предоставят основното съдържание, което се поставя в основната страница, за да се създаде крайната страница. Това е повече от просто включване на горен и долен колонтитул.

Подгледи

Една страница трябва да може да използва други HTML страници/шаблони като подизгледи в собственото си съдържание. Трябва да може да предава поне един параметър, за да предостави данните, които подизгледът трябва да покаже. Освен това трябва да е възможно рекурсивно да се използват допълнителни подизгледи в рамките на подизглед. Отново, това надхвърля обикновения механизъм за включване.

Без подкрепа

HTML шаблоните трябва да се състоят от един файл, който основно е HTML или XML страница, където определени части ще бъдат заменени въз основа на предоставените данни. Те не трябва да се нуждаят от допълнителни (на шаблон) конфигурационни файлове. И не би трябвало да имат нужда да внедряват каквито и да е Java класове за поддръжка.

Вече разгледах много машини за шаблони на Java. Но нито един от тях изглежда не отговаря на тези изисквания. (В света на .NET, ASP.NET MVC с машината за изглед на Razor би било идеално решение.)

Актуализация:

Досега разгледах следните двигатели (моля, уведомете ме, ако съм пропуснал начин да постигна изискванията си с един от тези двигатели):

  • JSP: Има само много основен механизъм за включване без главни шаблони или подходящ обхват за подизгледи и т.н.
  • Скорост: Има леко усъвършенстван механизъм за включване, но няма главни страници.
  • FreeMarker: Механизъм за включване, без главни страници.
  • Tapestry: Добри подизгледи, базирани на компоненти, както и механизъм за шаблони. Въпреки това, не изглежда лесно възможно да се използва частта на двигателя на шаблона без останалата част от рамката, която е твърде ориентирана към страницата, за да се комбинира с MVC рамка.
  • Плочки: Изисква две jsp страници на крайна страница. Двата слоя (плочки и jsp) го правят твърде сложен, особено за подизгледи.

Актуализация (2): Промених някои термини: изгледна машина вместо шаблонна машина, подизгледи вместо компоненти.


person Codo    schedule 31.12.2011    source източник
comment
Би било по-лесно, ако изброите кои двигатели (кои са, много или нито един?) сте разглеждали и защо не отговарят на вашите изисквания, за да избегнете каноничните предложения.   -  person Dave Newton    schedule 31.12.2011
comment
Мисля, че Tiles трябва да задоволят вашите нужди.   -  person JB Nizet    schedule 31.12.2011
comment
JSP позволява наполовина прилични шаблони, всъщност, но обхватът може да бъде болка. Velocity/FreeMarker позволяват шаблони чрез включвания. Плочките, особено последните версии, повече от удовлетворяват изискванията, въпреки че са конфигурирани чрез XML (възможно е обаче да има други налични механизми за конфигуриране). SiteMesh е малко по-различен и може да не е това, което търсите. Мисля, че и Mustache, и MVEL са излезли, но може би си струва да ги разгледате.   -  person Dave Newton    schedule 31.12.2011
comment
@DaveNewton: Благодаря за краткия анализ. Разгледах Tiles и не ми харесва (вижте актуализацията на моя въпрос).   -  person Codo    schedule 01.01.2012


Отговори (1)


Наистина не сте разглеждали шаблонните машини. JSP, Velocity и FreeMarker не са машини за шаблони (с вашето значение на машина за шаблони). Те са езици, позволяващи динамично генериране на маркиране и получаване на данните за показване в генерирания HTML от Java обекти. Tapestry е цялостна рамка за уеб приложения, базирана на компоненти.

Ако използвате JSP за генериране на HTML страници, можете да използвате машина за шаблони върху JSP като Tiles или SIteMesh, която ще се справи с шаблоните и по този начин ще позволи да имате един JSP на „компонент“ на цяла страница. JSP обикновено не трябва да се използва без уеб MVC рамка като Stripes, Spring MVC или Struts2. Всички те или имат своя собствена поддръжка за шаблони, и/или поддържат интегриране на друг като SiteMesh или Tiles.

person JB Nizet    schedule 31.12.2011
comment
Съгласен съм, че терминът шаблонна машина може да не е най-добрият за описание на JSP, Velocity и т.н. Разгледах Tiles и не съм сигурен дали разбирам правилно как работи. Изглежда, че е допълнителен слой, който съставя части от страница. Това е добре за главните страници. Изглежда обаче не предоставя компоненти. Или как би било възможно да се изгради HTML таблица с някакъв вид for цикъл в JSP страница и след това да се включи друга JSP страница, за да се запълни клетка от таблица във всеки ред? Как Tiles може да помогне тук? - person Codo; 31.12.2011
comment
Плочките могат да бъдат вложени в други плочки. Вижте tiles.apache.org/framework/tutorial/advanced/. За да направите това, което току-що описахте, просто включване или използването на файл с JSP тагове вероятно е достатъчно. Но Tiles също ще го позволи, ако искате. - person JB Nizet; 31.12.2011
comment
Виждал съм тази страница за гнездене. Но изглежда, че работи само за фиксирана структура, а не за таблица с различен брой редове. Или не разбрах правилно концепцията за Tiles? - person Codo; 31.12.2011
comment
Можете да извършвате цикъл с JSP тагове и при всяка итерация да вмъквате един (или няколко) атрибут(а) от вашата дефиниция на плочка. Дефинициите на плочките казват коя страница с оформление да се използва и какво да се включи във всеки заместител на оформлението. Лупингът не се извършва с Tiles. Това се прави с JSP тагове. - person JB Nizet; 31.12.2011
comment
Благодаря, ще опитам, въпреки че използването на компоненти изглежда толкова лесно и елегантно, колкото би искало. - person Codo; 31.12.2011
comment
Ако искате да използвате компоненти, тогава изберете рамка, базирана на компоненти, като Wicket, JSF или Tapestry. Но не забравяйте първо да разберете какво означават компонентите. - person JB Nizet; 31.12.2011
comment
Компонент вероятно не е най-добрата дума. Актуализирах въпроса си, за да използвам термина подизглед. След това разгледах по-отблизо Tiles, но открих, че е твърде сложно: трябва да създадете две jsp страници за всяка крайна страница, само за да използвате главни шаблони. И използването на друга jsp страница като subview също не е лесно. - person Codo; 01.01.2012
comment
Дефинициите на плочките обикновено се дефинират в XML файл и имате само един JSP за оформлението, един JSP за всяка част и XML файлът, сглобяващ крайните страници. Няма нужда от 2 JSP страници на последна страница. - person JB Nizet; 01.01.2012