Блог программатора |
||||||||
| Главная | Последние правки | Поиcк | Все страницы | Редактор | Админ | Печать | ||||||||
Введение в технологию шаблоновПроблема - хранение 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 <= cnt; i++)
{ String name=md.getColumnName(i);
String s=rs.getString(i);
if(s==null) s="";
if(s.trim().length()==0) s=" ";
row.addVar(name,s);
}
rows.append(row.getPage());
}
rs.close();
statement.close();
} catch(SQLException _ex) { System.out.println(""+_ex);}
catch(Exception _ex) { System.out.println(""+_ex);}
tbl.addVar("rows",rows.toString());
res.setContentType("text/html");
try{ res.getWriter().println(tbl.getPage());
} catch(Exception e) {System.out.println(""+e);}
}Достонство данной технологии - такми образом мы можем генерировать не только html текст но и данные в формате PDF (не сжатом!) или любом другом. КоментарииОтслеживать новые комментарии![]() Прокоментируйте эту статью! |
Главная Софт Хард Политеги SimpleWiki ![]() Почта ![]() Мой номер ICQ 456824974 ![]() Архив: 01.2010 02.2010 03.2010 04.2010 05.2010 06.2010 07.2010 Радио «Анонимус» ![]()
Blog ![]() Add bookmark: |
|||||||
|
© Komenda Viacheslav |
||||||||