Использовать AJAX вместо TagLib? - PullRequest
1 голос
/ 29 октября 2008

Я думал об идее использования Ajax вместо TagLib. Самый элегантный способ: использование аннотации Java. Идея заключается в том, что дизайнеры или кто угодно может создать HTML без тега, просто используя «стандартные» теги HTML с идентификатором или именем, и вызвать Javascript. Таким образом, можно использовать любой WYSIWYG, разработчик не должен заботиться о формате HTML или о его дизайне. Во многих (по крайней мере, с открытым исходным кодом) WYSIWYG не показывают ярлыки тегов в этом конечном результате (или имеют шаблон), поэтому трудно «предварительно просмотреть». Другая причина в том, что разработчик должен знать, что Java и HTML / TagLibs не должны быть обязательными, поскольку мы получили CSS и AJAX.

Это должно работать так:

MyClass.java : </p> <pre><code>import ... // Use the ResourceBundle resource[.{Locale}].properties @Jay2JI18n(resourceBundle="org.format.resource",name="MyClassForm") public class MyClass { private Integer age; private String name private Date dob; private salary; @Jay2JLabel(resource="label.name") @Jay2JMaxLength(value=50,required=true,) @Jay2JException(resource="exception.message") public String getName() { ... } public void setName(String name) { if ( name.trim().equal("") ) { throw new Exception("Name is required"); } } /* Getter and setter for age */ ... @Jay2JLabel(message="Salary") @Jay2JFormat(format="##,###.00",language="en") @Jay2JFormat(format="##.###,00",language="pt_BR") // or you could use that to access a property of the ResourceBundle //@Jay2I18nResource(resource="money.format") public Date getSalary() { ... } /* Setter for salary and getter/setter for the rest */ ... }

page.html : </p> <pre><code><html> <head> <SCRIPT> </SCRIPT> </head> <body> <form onload="Jay2J.formalize(this)"> </form> </body> </html>

из этого может быть HTML с заполненными полями; PageWithFields.html : </p> <pre><code><html> <head> <SCRIPT> </SCRIPT> </head> <body> <form action="myfavoritewaytopostthis" onsubmit="return Jay2J.validate(this)" onload="Jay2J.formalizeExistField(this)"> <label>Name</label><input type="text" name="name" id="name" /> <label>DOB</label><input type="text" name="dateOfBirth" id="dob" /> <label>Salary</label><input type="text" name="salary" id="salary" /> <input type="submit" /> </form> </body> </html>

Таким образом, Аннотация (без XML, это похоже на HTML в том смысле, что это всего лишь изменение файла, а XML - это не Java) будет определять способ обработки HTML. Таким образом, разработчик может прекратить разработку на HTML и использовать только JAVA (или JavaScript), как вы думаете, это правильная идея?

Ответы [ 4 ]

2 голосов
/ 29 октября 2008

Когда я увидел название вашей темы, я подумал:

Вы не можете использовать Ajax вместо taglib. AJAX - это JavaScript на клиенте, а taglib - это Java-код на сервере.

После прочтения вашего поста я подумал: ах, что он делает, что делает [текст ссылки] [1]

Но тогда не так же, как раньше.

[1]: http://code.google.com/webtoolkit/ GWT

1 голос
/ 01 сентября 2009

Эта идея имеет некоторые достоинства, если я правильно понимаю.

Вы можете использовать AOP для изменения сервлета, который фактически будет вызываться для страницы. Затем сервлет вернет HTML, используя аннотации.

Таким образом, программисты не видят генерацию html, и если у вас есть стандартная библиотека javascript для нее, она может работать.

Но то, что это работает, не означает, что вы должны это делать.

Как уже упоминалось, существует множество фреймворков, которые могут скрывать JavaScript от программистов, таких как JSF, который в основном является taglibs и другой схемой навигации.

Я помню, как использовал проект улья для создания чего-то подобного, он был основан на аннотациях, поэтому я мог делать все в Java, и он генерировал javascript несколько лет назад. :)

1 голос
/ 30 октября 2008

Первое впечатление было, WTF. После прочтения у меня сложилось впечатление, что вы пытаетесь решить проблему «разделения интересов» по-другому. Некоторые замечания о вашем подходе.

  1. Требует включения сценариев на стороне клиента и, следовательно, не соответствует рекомендациям по доступности.
  2. Изобретая колесо: многие веб-фреймворки, такие как Tapestry, Wicket, пытаются решить эти проблемы и проделали похвальную работу.
  3. В вашем комментарии о связывании Java с HTML пример кода не очень ясно передает эту идею. Forformize (), кажется, создает пользовательский интерфейс, что подразумевает, что у вас есть пользовательский интерфейс (HTML), закодированный в java (Плохая идея? Вероятно, NakedObjects не пытается использовать ваши доменные модели для пользовательского интерфейса, вероятно, да, если вы пишете код, специфичный для страницы)
  4. validate () вызывается для onSubmit (), почему я хочу, чтобы он обрабатывался асинхронно !! Кроме того, использование навязчивого Java-скрипта - выход из моды (снова разделение проблем)
  5. Ваш аргумент в пользу taglibs, препятствующий WYSIWIG, хотя и оправдан, но не совсем верен. Теги нельзя использовать для создания других тегов, каждый тег является уникальным объектом, который либо имеет дело с поведением, либо испускает некоторый HTML-код. Ваш аргумент действителен для второго случая. Тем не менее, если я правильно понимаю вашу формализацию (), вы делаете то же самое!

Приятно слышать некоторые новые идеи и добро пожаловать в SO. Также, пожалуйста, используйте опцию редактирования вопроса, пока вы не заработаете достаточно репутации, чтобы добавлять комментарии. Добавлять ответы не правильно!

1 голос
/ 29 октября 2008

Первое впечатление ... хм, кто-то, кто поднимет это, не поймет, на что он смотрит, не изучив ваш (новый, другой, нестандартный) способ делать вещи. Вы могли бы сделать что-то подобное, внедрив тег, который принимает bean-компонент (объект-значение) и, возможно, проводит небольшую проверку отражения / аннотации для создания правильного html, и вы сэкономите много душевной боли в будущем.

Сделайте так, чтобы ваши объекты-значения реализовали простой интерфейс, который ваш тег будет использовать для извлечения и форматирования html, и вы, вероятно, сможете получить 80-90% того, что вы пытаетесь сделать, с 1/2 работы или меньше.

...