powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / GXT vs ExtJS vs jQuery
20 сообщений из 70, страница 3 из 3
GXT vs ExtJS vs jQuery
    #38204656
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон за задержку, выходной

Йуный джавистЪ
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
class UserServlet extends HttpServlet{
	public void service(HttpServlet req,HttpResponse resp){
		User user = null;
		if(req.getMethod().equals("GET")){
			if(req.hasParameter("id")){
                                //ГДЕ КОНВЕРТАЦИЯ ПАРАМЕТРОВ ВСЕХ ВОЗМОЖНЫХ ТИПОВ С УЧЕТОМ ЛОКАЛИ?
				user = userDao.getById(req.getParamter("id"));                               
			}
		}else if(req.getMethod().equals("POST")){
                        user = new User();
                        //МЕТОДЫ validate на самом деле пишут в user, wtf?		
			BindingUtils.validateRequired(req,user,"firstname");			
			BindingUtils.validateDate(req,user,"birthdate");
                        //ГДЕ свойства не требующие валидации? где ковертация в целевой тип?
                        //BeanUtils.set(user, "id", req.getParameter("id"); TODO Convert to int
                        //BeanUtils.set(user, "roles", req.getParameter("roles"); TODO convert to Set<Role>
                        //BeanUtils.set(user, "company", req.getParameter("company_id"); TODO convert to int
                        //BeanUtils.set(user, "createdBy", req.getParameter("created_by"); TODO convert to int
                        //и т.д. допустим у пользователя 10-15 полей. У меня это все есть из коробки, где это тут???

			if(!req.hasAttribute("has_validation_errors")){
				userDao.save(user);	
				resp.redirect("userlist");
			}                        
		}
		Map data = new HashMap();
		data.put("user",user);
		SomeTemplateEngine.render(resp.out,data,"/templates/usertemplate")
	}
}

class BindingUtils{
	static boolean validateDate(HttpRequest req,Object o,String prop){
		DateFormat somedateFormat = ...;
		Date date = null
		try{
			date = somedateFormat.parse(req.getParameter("prop"));
		}catch(ParseException e){
                        //ГДЕ ЛОГИКА РЕАЛИЗУЮЩАЯ ПОКАЗ ОШИБКИ В ПОЛЕ, СОДЕРЖАЩЕМ ОШИБКУ?
                        //ОТКУДА МЫ ЗНАЕМ, КАК ОТЛИЧИТЬ ОШИБКУ ОТ СООБЩЕНИЯ? У НАС ВСЕ XXX_message
                        //ГДЕ ВИДНО, ЧТО LocalizationUtils "per request"? ГДЕ ЭТО ВСЕ РЕГУЛИРУЕТСЯ? ТЫ ЖЕ НЕ ЮЗАЕШЬ Ioc, ВСЕ НА СТАТИКАХ
			req.setAttribute(prop+"_message",LocalizationUtils.getMessage("NOT_A_DATE"));
			req.setAttribute("has_validation_errors",true);
			return false;
		}
                //ПОЧЕМУ ВАЛИДАЦИЯ СОВМЕЩЕНА С УСТАНОВКОЙ ЗНАЧЕНИЙ И ПРИВЯЗАНА К РЕКВЕСТУ? КАК БЫТЬ С ПОЛЯМИ БЕЗ ВАЛИДАЦИИ?  
                //В ТАКОМ ВИДЕ BindingUtils МОЖНО ПОЛЬЗОВАТЬСЯ ТОЛЬКО ТАК, КАК В ПРИМЕРЕ. ПРОСТО ВАЛИДИРОВАТЬ НЕ ПОЛУЧИТСЯ
                //ЗАЧЕМ ТОГДА МЕТОД ВООБЩЕ ЧТО-ТО ВОЗВРАЩАЕТ?
		BeanUtils.set(o,prop,date);
		return true;
	}
	//по аналогии методы для другой валидации
        //ДАВАЙ НЕ ПО АНАЛОГИИ А ВСЕ 7-8 СТАНДАРТНЫХ ВАЛИДАТОРОВ И ПРОВЕРКИ НА ТО, ЧТО чИСЛО ЭТО ЧИСЛО, ДЕСЯТИЧНЫЙ РАЗДЕЛИТЕЛЬ ЭТО ДЕСЯТИЧНЫЙ РАЗДЕЛИТЕЛЬ И Т.Д. С ВЫДАЧЕЙ ПОНЯТНЫХ ЮЗВЕРЮ ОШИБОК
}



итого, твой пример - именно что пример, по завершенности он даже близко не подбирается к моему, потому что там законченное решение даже на случай,
если у класса User 150 полей являющихся не только примитивами но и в свою очередь бинами типа Company, Group, Role, Department и т.д.
При этом твой пример уже сейчас больше моего, а будучи полноценно реализованным будет на хорошее количество экранных листов. и это еще без реализации логики во view (мой view является где-то на 80% завершенным,
не хватает только тонкой настройки например какие поля не отображать)
И это еще без реализации ограничения доступа (у меня это будет либо <intercept pattern="**/edituser", либо @RequiresRoles("admin"), либо

@RequiresPermissions("users:save")
public void onSomeAction(EventContext eventContext) {
...
})



так что термин "фигачить" очень удачно подходит к подобному коду, фигачить там прилично.
ну и собственно если вам подобное дает ложное чувство "контроля" над проектом, то, как говорится, на здоровье.
Но как по-мне - подобный поделки быстро превращаются в неуправляемый кошмар. В одном месте подкрутишь, в другом сломается.
Наследнику проекта просто не завидую. Я и своему наследнику не завидую, потому переписываю по-тихоньку страницу за
страницей с freemarker на tapestry. Разница в результате просто ошеломительна.


P.S. фримаркер - хороший инструмент, но он гораздо лучше подходить для темплейтов писем,
документов и т.д. html страницы (особенно достаточно сложные) на фримаркере очень быстро становятся монструозными.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204756
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
итого, твой пример - именно что пример, по завершенности он даже близко не подбирается к моему, потому что там законченное решение даже на случай,
если у класса User 150 полей являющихся не только примитивами но и в свою очередь бинами типа Company, Group, Role, Department и т.д

Я вижу, ты пропагандируешь такой подход - все параметры запроса берутся и суются в объект User. Пока класс состоит из фамилии, имя и отчества это работает. Потом в класс User добавляется поле isAdmin. Хитрый хакер при регистрации добавляет к запросу &isAdmin=true и сразу становится админом.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204772
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторГДЕ ЛОГИКА РЕАЛИЗУЮЩАЯ ПОКАЗ ОШИБКИ В ПОЛЕ, СОДЕРЖАЩЕМ ОШИБКУ?
Очевидно, что в шаблонизаторе доступны переменные типа birthdate_message, которые должен отобразить в шаблоне верстальщик.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204774
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪЯ вижу, ты пропагандируешь такой подход - все параметры запроса берутся и суются в объект User. Пока класс состоит из фамилии, имя и отчества это работает. Потом в класс User добавляется поле isAdmin. Хитрый хакер при регистрации добавляет к запросу &isAdmin=true и сразу становится админом.
Для этого есть DTO. А ещё лучше аннотации, как, например Ignore для JSON сериализатора.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204783
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что там за проблема с локалью?
И я бы не мешал валидацию с показом ошибки и контроль типов (системная ошибка)
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204840
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪПотом в класс User добавляется поле isAdmin. Хитрый хакер при регистрации добавляет к запросу &isAdmin=true и сразу становится админом.ты иногда такие наивные вопросы задаешь, что я просто в ступор впадаю.
наверно для того и существует метод onValidate, чтоб проверять, кто что имеет право делать. очевидно, что операции с ролями требуют от оператора наличия определенных прав. нет? так что хитрый хакер может вставлять туда хоть свой конец. несмотря на почти полную законченность мой пример все-таки всего лишь пример. там и валидации пароля нет, я ж не могу все бизнес-логику сюда вывалить. вернее могу, но зачем? ты тщетно пытаешься найти в моем примере недостатки в пользу твоего по той простой причине, что мой и твой делают в принципе одно и тоже. только мой с гораздо меньшим количеством кода, гарантированно большей надежностью и с гораздо большими возможностями кастомизации.

я не отвергаю право на существование кастомых решений. но каждый раз их применение должно быть оправданно.

Йуный джавистЪавторГДЕ ЛОГИКА РЕАЛИЗУЮЩАЯ ПОКАЗ ОШИБКИ В ПОЛЕ, СОДЕРЖАЩЕМ ОШИБКУ?
Очевидно, что в шаблонизаторе доступны переменные типа birthdate_message, которые должен отобразить в шаблоне верстальщик.мне-то как раз очевидно. зато тебе не очевидно, где тут проблема (даю подсказку - проблема здесь в бездумном копипасте одного и того же кода на всех страницах)
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<input type="text" name="login" value="${user.login!}" <#if login_message!false>class="error"</#if>/>
<#if login_message!false><label class="error">${login_message}</#if>

vs

<input type="text" t:id="login" value="user.login" validate="required"/>

или даже 

//этот вариант по лаконичности просто чемпион, генерит форму целиком
//но он требует некоторой настройки на уровне 
//приложения, например какой компонент показывать для поля типа Set<Roles> и т.д.
//и его трудней в кастомный стиль загнать
<beaneditor value="user"/>  


чуешь разницу? хотя вряд ли, если у тебя все по принципу "для бешенной собаки семь верст не крюк". разве не ты жаловался, что на яве ничего меньше чем за X строчек кода не написать? (может и не ты, мне что-то так запомнилось)

к тому же верстальщик знающий freemarker, really?
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204844
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для этого есть DTO. А ещё лучше аннотации, как, например Ignore для JSON сериализатора.

Пусть есть два сценария - первый когда пользователь сам регистрируется на сайте, а второй - когда один админ создает другого админа. Валидация в этих случаях должна быть совершенно разной, поэтому аннотации не катят. DTO тоже не очень, потому что два разных DTO, даже если отличаются на одно поле, являются в яве совершенно разными типами и с ними нельзя работать полиморфно.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204856
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123а что там за проблема с локалью?
проблема в том, что из его примера не очевидно, как реализуется показ локализованных ошибок в зависимости от настроек пользователя. особенно с учетом предыдущего топика, в котором Йуный Джавист говорил о том, что предпочитает статические классы. Вот мне и интересно посмотреть, как это все разрулилось в LocaleUtils , в который ни локаль текущая не передается, ни реквест - ioc он же не юзает, откуда тогда в LocaleUtils текущей локали юзверя взяться? Ну и плюс thread safety самому обеспечивать, хуле.

Petro123И я бы не мешал валидацию с показом ошибки и контроль типов (системная ошибка)
по сравнению с вызовом BeanUtils.set внутри валидации это уже мелочи. Собственно о том и речь - самостоятельно изобретая велосипеды мы делаем массу ошибок. Про потерю времени я уже молчу.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204860
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪПусть есть два сценария - первый когда пользователь сам регистрируется на сайте, а второй - когда один админ создает другого админа. Валидация в этих случаях должна быть совершенно разной, поэтому аннотации не катят.
Ну, это смотря какие аннотации. Security навернуть сверху можно даже на свойства сущностей.

Йуный джавистЪDTO тоже не очень, потому что два разных DTO, даже если отличаются на одно поле, являются в яве совершенно разными типами и с ними нельзя работать полиморфно.
Наследование и интерфейсы в DTO никто не запрещает.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204865
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪПусть есть два сценария - первый когда пользователь сам регистрируется на сайте, а второй - когда один админ создает другого админа. Валидация в этих случаях должна быть совершенно разной, поэтому аннотации не катят.
это чисто архитектурная задача с массой способов решения. что касается аннотаций, я бы тоже не стал здесь лепить аннотацию (потому что собственных данных объекта user не достаточно для валидации) . можно на пользовательской странице в onValidate устанавливать isAdmin принудительно в false, а на админской проверять есть ли права.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204868
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как реализуется показ локализованных ошибок в зависимости от настроек пользователя
В методе валидации меняешь
Код: sql
1.
req.setAttribute(prop+"_message",LocalizationUtils.getMessage("NOT_A_DATE"));


на
Код: sql
1.
req.setAttribute(prop+"_message",LocalizationUtils.getMessage(req.getLocale(),"NOT_A_DATE"));
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204883
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪкак реализуется показ локализованных ошибок в зависимости от настроек пользователя
В методе валидации меняешь
Код: sql
1.
req.setAttribute(prop+"_message",LocalizationUtils.getMessage("NOT_A_DATE"));


на
Код: sql
1.
req.setAttribute(prop+"_message",LocalizationUtils.getMessage(req.getLocale(),"NOT_A_DATE"));


а сразу почему так не написал, нету локализации в проекте?
а если у меня локаль через куки, а если в урл? нужен фильтр, да? чуешь как наш мини-фреймворк обрастает мышцой кодом?

так вот еще раз, если не понятно, куда я клоню - пока что ты под моим чутким руководством реализуешь кое-как одну за другой фичи, которые где-то еще уже есть. какой профит ты при этом имеешь, кроме того, что это "свое-родное", а то "чье-то чужое"?
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204886
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaэто чисто архитектурная задача с массой способов решения. что касается аннотаций, я бы тоже не стал здесь лепить аннотацию (потому что собственных данных объекта user не достаточно для валидации) . можно на пользовательской странице в onValidate устанавливать isAdmin принудительно в false, а на админской проверять есть ли права.
А по-моему аннотация авторизации на уровне свойства - самое то. Есть права у юзера, он её, видит. Либо видит и пишет. Либо не видит и не пишет. И никакой хакер не пролезет. Надо поменять свойство в воркфлоу без достаточных прав - выполняешь действие в коде, явно указывая право. Так вся Java секурити построена.
Зато проверки не расползаются по всем контроллерам и прочим классам.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204895
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА по-моему аннотация авторизации на уровне свойства - самое то.
у меня нет окончательно сложившегося мнения на этот счет.

Blazkowicz Есть права у юзера, он её, видит. Либо видит и пишет. Либо не видит и не пишет.
ты имеешь в виду спрятать User за интерфейсом и навесить на get/setAdmin секьюрити-аннотацию?

BlazkowiczЗато проверки не расползаются по всем контроллерам и прочим классам.
теоретически ты прав, но практически таких мест как-правило 1-2 (чаще 1), пока это так - not big deal (тем более что логику-то мы не дублируем). но на досуге надо подумать.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204896
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДАВАЙ НЕ ПО АНАЛОГИИ А ВСЕ 7-8 СТАНДАРТНЫХ ВАЛИДАТОРОВ И ПРОВЕРКИ НА ТО, ЧТО чИСЛО ЭТО ЧИСЛО, ДЕСЯТИЧНЫЙ РАЗДЕЛИТЕЛЬ ЭТО ДЕСЯТИЧНЫЙ РАЗДЕЛИТЕЛЬ И Т.Д. С ВЫДАЧЕЙ ПОНЯТНЫХ ЮЗВЕРЮ ОШИБОК

несмотря на почти полную законченность мой пример все-таки всего лишь пример. там и валидации пароля нет, я ж не могу все бизнес-логику сюда вывалить. вернее могу, но зачем
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204906
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪДАВАЙ НЕ ПО АНАЛОГИИ А ВСЕ 7-8 СТАНДАРТНЫХ ВАЛИДАТОРОВ И ПРОВЕРКИ НА ТО, ЧТО чИСЛО ЭТО ЧИСЛО, ДЕСЯТИЧНЫЙ РАЗДЕЛИТЕЛЬ ЭТО ДЕСЯТИЧНЫЙ РАЗДЕЛИТЕЛЬ И Т.Д. С ВЫДАЧЕЙ ПОНЯТНЫХ ЮЗВЕРЮ ОШИБОК

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

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

если ты планируешь и далее в том же духе писать, думаю дискуссию можно считать оконченной.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204931
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если ты планируешь и далее в том же духе писать, думаю дискуссию можно считать оконченной.

Ну, это ты во втором треде подряд пытаешься доказать мне что я быдлокодер. Мне даже интересно стало, что я такого написал на этом форуме что тебя это так обидело. Если что, то прости, я честное слово не специально.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204959
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪесли ты планируешь и далее в том же духе писать, думаю дискуссию можно считать оконченной.

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

Йуный джавистЪ Мне даже интересно стало, что я такого написал на этом форуме что тебя это так обидело.
да я не обижен. просто твоя критика часто не конструктивна и местами эмоционально. я парень горячий, но вроде бы в этом топике я волю чувствам не давал. если тебе показалось иначе, извини.

Йуный джавистЪ Если что, то прости, я честное слово не специально.
та ниче, просто не хотелось, чтобы топик скатывался в неконструктив, потому что топик интересный, хоть мы и далеко от темы ушли.
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204971
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<input type="text" name="login" value="${user.login!}" <#if login_message!false>class="error"</#if>/>
<#if login_message!false><label class="error">${login_message}</#if>

vs

<input type="text" t:id="login" value="user.login" validate="required"/>

А кстати, допустим верстальщик наверстал так что инпут в одном диве а валидационное сообщение в другом диве, можно ли такую верстку реализовать в рамках этого фреймворка?
...
Рейтинг: 0 / 0
GXT vs ExtJS vs jQuery
    #38204983
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪА кстати, допустим верстальщик наверстал так что инпут в одном диве а валидационное сообщение в другом диве, можно ли такую верстку реализовать в рамках этого фреймворка?
если я тебя правильно понял...
так?



блин, в хроме тэги sql.ru не хотят вставляться
...
Рейтинг: 0 / 0
20 сообщений из 70, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / GXT vs ExtJS vs jQuery
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]