Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное представление HTML элементов, существует ли в природе? 
:(
    Опции темы
Stampede
Дата 6.6.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 3
Всего: 144



Недавно пришла в голову вот какая мысль, а ведь можно разработать программную модель для всех HTML элементов, и создавать страницы, используя код примерно такого вида:

Код

public class InvoicePage extends HtmlPage
{
  public InvoicePage(URL url)
  {
    super(url);
  }

  public void init(HttpServletRequest request, HttpServletResponse response)
  {
    super(request, response);

    long invoiceNo = request.getParameter("invno");

    this.addStyle("/style.css");
    this.addStyle("/invoice.css");
    this.setTitle("Invoice " + invoiceNo);

    Body body = new Body();
    body.addAttribute("class", "outer");
    body.addAttribute("bgcolor", "lightgray");
    this.setBody(body);

    List columns = someResourceLocator.getInvoiceColumns();
    List items = anotherResourceLocator.getInvoiceItems(invoiceNo);
    Table table = new Table(columns);
    for (int i = 0, n = items.size(); i < n; i++)
    {
      InvoiceItem item = (InvoiceItem) items.get(i);
      Iterator iter = columns.iterator();
      TR tr = new TR();
      while (iter.hasNext())
      {
        Column col = (Column) iter.next();
        TD td = new TD(item.get(col.getName()));
        tr.add(td);
      }
      table.add(tr);
    }

...

// и т.д. и т.п.

...

  }

}


Я не хочу сказать, что это было бы очень удобным способом программирования стрвниц, но если не доводить сей подход до крайности и абсурда, а использовать отдельные HTML элементы в таком представлении для автоматизации отдельных задач (например, автогенерация HTML форм из метаданных), то такая вещь в связке, например, с шаблонным движком - могла бы расширить арсенал программиста.

Ну и вот. Так вот я и думаю, наверняка кто-то такое уже разрабатывал. Не может быть, что такая очевидная идея не пришла в голову еще кому-нибудь. Поэтому вопрос: если слышали про такие штуки - колитесь, пожалуйста smile


PM WWW   Вверх
simanyay
Дата 6.6.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



Для определенных задач вполне удобно. В Ruby такое есть и, не скрою, это иногда очень помогает.


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
Шмель
Дата 7.6.2005, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.4.2004

Репутация: 5
Всего: 18



Element Construction Set - похоже на то, что ты описываешь. При использовании получается такой код:
Код
Html html = new Html()
              .addElement(new Head()
                  .addElement(new Title("Demo")))
              .addElement(new Body()
              .addElement(new H1("Demo Header"))
              .addElement(new H3("Sub Header:"))
              .addElement(new Font().setSize("+1")
                         .setColor(HtmlColor.WHITE)
                         .setFace("Times")
                         .addElement("The big dog & the little cat chased each other.")));
out.println(html.toString()); 
// or write to the outputstream directly
output(out);

--------------------
будешь на Земле - заходи
PM MAIL ICQ   Вверх
AntonSaburov
Дата 7.6.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



А разве тема Velocity не о таком варианте ? Хотя я давно очень читал - может и не понял точно все тогда.
PM MAIL WWW ICQ   Вверх
Stampede
Дата 7.6.2005, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 3
Всего: 144



Цитата(AntonSaburov @ 7.6.2005, 12:07)
А разве тема Velocity не о таком варианте ?


Нет-нет, это совсем разные вещи. Я говорю о библиотеке, где все HTML элементы были бы представлены в виде классов: Head, Body, P, UL, LI, Table, TR, TD и т. д. smile То есть каждый класс сам знает, как рендерить себя в HTML, с учетом всего того, что в него напихали.

А про Velocity - обязательно напишу. Похоже, народ так и не понимает, в чем от него кайф. А кайф - огромный!


Шмель - в самую точку. Администрация, прошу представить товарища к награде smile

PM WWW   Вверх
simanyay
Дата 7.6.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



Цитата(Stampede @ 7.6.2005, 21:52)
А про Velocity - обязательно напишу. Похоже, народ так и не понимает, в чем от него кайф. А кайф - огромный!


А мы всё ждём-с...

Цитата(Stampede @ 7.6.2005, 21:52)
Шмель - в самую точку. Администрация, прошу представить товарища к награде smile


Награждён почетным орденом "+".


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
Stampede
Дата 7.6.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 3
Всего: 144



Цитата(simanyay @ 7.6.2005, 19:59)
Награждён почетным орденом "+".


Георгиевский крест? smile


PM WWW   Вверх
batigoal
Дата 7.6.2005, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Что? Крест имени меня? Спасибо, конечно, но, право же, не стоит... smile

Stampede Есть закрепленный топик на тему Velocity: http://forum.vingrad.ru/index.php?showtopic=44988. Есть желание - дополни, скажу спасибу. smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Stampede
Дата 7.6.2005, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 3
Всего: 144



Цитата(Lamer @ 7.6.2005, 22:18)
Есть закрепленный топик на тему Velocity


Дак, я ж знаю. Я же именно там и обещался. И выполнил - встречайте: Для чего же все-таки нужна Velocity


PM WWW   Вверх
Stampede
Дата 9.6.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 3
Всего: 144



Кстати, вот пример ситуации, где подобный класс будет весьма полезным. Посмотрите на тег <head>. В динамическом проложении он, как правило, хранится в отдельном файле и подключается при помощи какой-нибудь include в той или иной форме форме.

Но содержимое тега <head> само по себе переменное и зависит от страницы. Хорошо, если изменяется только Title, тогда все относительно просто. А что если нужен разный Content-Tipe, например в многоязыковом проекте? А что если CSS подключается разный? А если нужно больше одного CSS файла? Передавать списком и итерировать в коде шаблона? Плюс та же фигня с мета параметрами http-equiv. Не слишком ли громоздко получится?

А теперь представим, что у нас есть класс Head с такими методами:

Код

public class Head extends Element
{
  public Head() {}
  public Head(String contentType, String title) {// детали опускаются}

  public void setContentType(String type) {}
  public void setKeywords(String keywords) {}
  public void setDescription(String description) {}
  public void addHttpEquiv(String name, String content) {}
  public void addCss(String cssPath) {}
}


Тогда мы запросто все это можем подготовить в классе, отвечающем за подготовку данных для шаблона, а в самом шаблоне просто одной строчкой сослаться на объект класса Head:

Код

$head


По соглашению Velocity при такой записи вызывается метод toString() ссылемого объекта. Который в случае класса Head должен делать то, что от него и ожидается: рендерить себя в HTML.

Куль? Да, куль. Тут опять надо заметить, что наиболее естественным образом такой фокус можно осуществить, если приложение спроектировано в идеологи Velocity (см. статью о Velocity)

Теперь смотрим на то, как класс Head реализован в библиотеке Jakarta ECS (Element Construction Set). А очень тупо он реализован. Слшком общО. Описания API в Javadoc в онлайне для него не нашел, поэтому привожу по той документации, что идет в пакете:

Код

addElement(Element element)
addElement(String strelem)
addElement(String hash, Element element)
addElement(String hash, String strelem)
removeElement(String hash)
setProfile(String profile)


Нахера?! Вы же не generic API создаете, у вас же конкретная библиотека классов. Сделайте так, чтобы ею было удобно пользоваться! Дайте мне convenience методов. Чтобы можно было одной строчкой добавить CSS или там HttpEquiv - неужели так трудно? И ведь явно для себя писали, не для дяди, а вот поди ж ты.

Короче, блин, как меня это уже задрало. Ни на кого нельзя положиться, все приходится делать самому. И буду делать. А кому щас легко smile


PM WWW   Вверх
Stampede
Дата 10.6.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 3
Всего: 144



Цитата(Lamer @ 7.6.2005, 22:18)
Есть закрепленный топик на тему Velocity: http://forum.vingrad.ru/index.php?showtopic=44988. Есть желание - дополни, скажу спасибу. smile


[выжидательно смотрит]

smile


PM WWW   Вверх
batigoal
Дата 10.6.2005, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Domestic уже сказал smile

Просто я так и не поверил, что это лучше, чем использовать Expression Language. Но это уже мои проблемы. Потом пощупаю сам и решу.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Stampede
Дата 10.6.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 3
Всего: 144



Цитата(Lamer @ 10.6.2005, 20:03)
Просто я так и не поверил, что это лучше, чем использовать Expression Language.


Так давайте же обсуждать! Я же завершаю статью приглашением к обсуждению. В этом ведь главный пойнт нашего здесь тусения. А может я действительно неправ? Может, я чего-то важного не понимаю в этой жизни?

Цитата(Lamer @ 10.6.2005, 20:03)
Domestic уже сказал


Я, между прочим не о регалиях, а о простом человеческом спасибе, которое было обещано. Старался, как-никак smile




--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
batigoal
Дата 10.6.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Спасибо! И даже большое! smile

А насчет обсуждения - пока я сам не попробовал, я не смогу квалифицированно вести дискуссию. Так что обождем.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
simanyay
Дата 10.6.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



Твоей статье даже реклама была smile


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.1386 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.