Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Введение в технологию шаблонов

div.main {margin-left: 20pt; margin-right: 20pt}

Введение в технологию шаблонов


Developers.com.ua


Проблема - хранение html-кода в теле скрипта. - Нам необходимо отделить код скрипта (java-сервлет, perl, php) от html кода - чтобы дизайнеры могли вносить изменения. При этом нам надо (например) вставлять в страничку результаты выполнения запросов к sql базе. Или например нам нужно разослать пользователся сайта письмо вида: "Уважаемы Иван Иванович...". Для этого нам надо чтобы документ (html страничка) хранился на диске, а мы при необходимости загружали ее в память каким-то образом заполняли.

То есть мы подчитываем файл-шаблон, подставляем в него вычисленные значения переменных и выдаем его как результат работы скрипта. Как куда и с каком виде подставляются наши данные? - Очень просто - мы считали в String весь html код и, например, делем обыкновенную текстовую замену - $AGE$ заменяем на вычесленное значение 25. AGE выделенно значками $ чтобы случайно не заменить что-то лишнее :).

Такую работу по замене как раз и выполняют Template библиотеки классов. Существует множество библиотек классов реализующих шаблонные технологии, например webmacro.

Способ выделения переменной шаблона везде разный - в webmacro, например, переменная AGE в тексте html-кода выглядела бы как $AGE, в случае моего класса - $AGE$.

Рассмотрим подробнее как это работает. Например так мы можем сделать форму редактирования с default-значениями в полях ввода:

Создадим шаблон (файл myform.tmpl) :

<HTML> <BODY> <FORM> <INPUT TYPE=TEXT NAME="FIO" VALUE="$FIO$"> <INPUT TYPE=TEXT NAME="AGE" VALUE="$AGE$"> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

а в исходном коде напишем:

public final void doGet(HttpServletRequest req ,HttpServletResponse res) throws ServletException,IOException { Template t=new Template(new File("myform.tmpl")); t.addVar("FIO","Иванов"); t.addVar("AGE","25"); try { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(t.getPage()); } catch(Exception e) { System.out.println("Exception: "+e);} }

и в результате сервлет выдаст html-код:

<HTML> <BODY> <FORM> <INPUT TYPE=TEXT NAME="FIO" VALUE="Иванов"> <INPUT TYPE=TEXT NAME="AGE" VALUE="25"> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

А как работать с таблицами? - Просто! - Для них надо уже два шаблона. Первый - шапка таблицы, второй - описывает одну строку. В StringBuffer мы накапливаем строки, после этого вставляем их в шапку (как значение одной переменной). Пример:

table.tmpl:

<HTML> <BODY> Справочник товаров
<TABLE width="100%" cellspacing=0 border=0> <TR> <TD>Номенклатурный номер</TD> <TD>Наименование</TD> </TR> $rows$ </TABLE> </BODY> </HTML>

row.tmpl:

<TR> <TD>$ITOVAR$</TD> <TD>$HTOVAR$</TD> </TR>

select.java:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException { Template tbl=new Template(new File("table.tmpl")); Template row=new Template(new File("row.tmpl")); StringBuffer rows=new StringBuffer(); try { Statement statement = (someconnection.getConnection()).createStatement(); String str="SELECT * FROM TOVAR"; ResultSet rs = statement.executeQuery(str); ResultSetMetaData md = rs.getMetaData(); int cnt= md.getColumnCount(); while(rs.next()) { for(int i = 1; i

  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте