Профиль пользователя заблокирован сроком с 24 марта 2024 г. и навсегда по причине: систематические нарушения пункта 5.2 правил сервиса
  • Как правильно написать обобщенный метод?

    @My1Name
    Используйте Tree model. Проверяйте поля по имени и стройте ту сущность, которой соответствует поле объекта. А потом уже обобщайте как хотите. Или создавайте свой обобщённый класс (Pojo), проверяйте каждое поле и стройте сразу обобщённый объект, в котором некоторые поля могут быть со значением null.

    См. Как игнорировать неизвестные поля JSON
    Ответ написан
    2 комментария
  • По какому принципу разбивается http запрос/ответ?

    @My1Name
    По какому принципу разбивается http запрос/ответ?

    По принципу стандартизации HTTP протокола.
    https://ru.wikipedia.org/wiki/HTTP
    Ответ написан
    Комментировать
  • Как в spring реализовать авторизацию по bearer токенам БЕЗ JWT?

    @My1Name
    В контексте Authentication, нужно смотреть в сторону ручной авторизации (автоматическая авторизация после регистрации). Там всё достаточно просто и понятно. Ну а если хочется изобрести что-то новенькое, то нужно читать документацию: https://docs.spring.io/spring-security/site/docs/4...
    Ответ написан
  • Как начать свой первый проект?

    @My1Name
    Рисуйте. Прорисуйте как можно детальней все страницы/окошки программы. Для этого можно использовать фотошоп, скриншоты и разные картинки с интернета. Если вы пишите веб-проект, то когда закончите рисовать - начните с вёрстки и разметки. А если вы хотите создать десктопное приложение, то вместо вёрстки и разметки, для начала напишите пустое окно ("чистый лист") и потом добавляйте управляющие элементы.
    Ответ написан
    Комментировать
  • Как передавать ArrayList между фрагментами?

    @My1Name
    Как передавать ArrayList между фрагментами?

    Обычно. Пока страница не построена, один объект используется во всех фрагментах.

    И самое главное, чтобы этот список можно было модифицировать и он, в обновленной версии, был доступен при смене фрагмента

    Фрагменты меняются только при перезагрузке страницы. Они компилируются и вы не можете менять данные после того, как страница уже на стороне клиента. Иначе нужно использовать JavaScript и/или ajax.

    чтобы этот список можно было модифицировать

    Создайте карту Map<key,ArrayList<?>> action; и храните в ней все изменения до логического завершения. Если у вас ProductFragment, значит по условию "payment" или пока пользователь online.
    Ответ написан
  • Сформировать вывод на страницу Thymeleaf?

    @My1Name
    Кладёте пользователей со всеми полями в List<Person> data передаёте на представление через model.addAttribute("Person", data);и выводите с помощью Thymeleaf итератора. Например так:
    <div th:each="user : ${Person}">
    <span th:text="${user.name}"></span>
    <span th:text="${user.date}"></span>
    <span th:text="${user.role}"></span>
    <span th:text="${user.description}"></span>
    </div>

    В данном примере, поля объекта Person с модификатором доступа - public.
    Как перебрать List<?> средствами Thymeleaf?
    Ответ написан
    1 комментарий
  • Ошибка Mysql query error: (1062) Duplicate entry 'iblock-seometa_99_4062_063_99_1' for key 'UX_B_SEARCH_CONTENT' при переиндексации?

    @My1Name
    Duplicate entry 'iblock-seometa_99_4062_063_99_1'

    Поле помечено как PRIMARY KEY или UNIQUE KEY. Посмотрите как вы создаёте таблицу... Эти ключи запрещают дубликаты. Используйте просто INDEX или вспомогательную таблицу если данные могут быть одинаковы.
    Ответ написан
  • HTTP Status 500 Spring Thymeleaf, в чем причина ошибки?

    @My1Name
    В классе SpringConfig:
    @Bean
    public SpringResourceTemplateResolver templateResolver(){
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(servletContext);
        templateResolver.setPrefix("/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false); // отключаем везде кэш на время разработки 
        return templateResolver;
    }
    @Bean
    public SpringTemplateEngine templateEngine(){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }
    @Bean
    public ThymeleafViewResolver viewResolver(){
    	ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    	viewResolver.setTemplateEngine(templateEngine());
    	viewResolver.setCharacterEncoding("UTF-8");
    	return viewResolver;
    }

    Вместо jakarta.servlet и thymeleaf-spring6 в poom.xml
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.thymeleaf</groupId>
    	<artifactId>thymeleaf-spring5</artifactId>
    </dependency>
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>javax.servlet-api</artifactId>
    	<scope>provided</scope>
    </dependency>
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>jstl</artifactId>
    </dependency>

    Класс MySpringMvcDispatcherServletInitializer можно (и нужно) удалить.

    Под Spring6 - Spring Security (если я не ошибаюсь) - ещё не работает.
    Ответ написан
  • В чем ошибка Spring MVC 404?

    @My1Name
    Переложите файлы "hello.hml" и "goodbye.html" на уровень выше: src/main/webapp/hello.html
    В таком случае ваш конфиг будет выглядеть так:
    templateResolver.setPrefix("/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateMode.HTML);

    Контроллер:
    @Controller
    @RequestMapping("/") 
    public class FirstController {
    @GetMapping("/hello")
    public String helloPage() {
            return "hello";
        }
    }

    Страница доступна по адресу localhost:8080/hello где 8080 - это номер порта на котором работает ваш сервер.

    Узел WEB-INF не является частью общедоступного дерева документов приложения. Ни один файл, содержащийся в WEB-INF каталоге, не может быть передан контейнером непосредственно клиенту.
    https://stackoverflow.com/a/19786283/15454143
    Ответ написан
  • Как сказать «ничего не делаем» используя условные операторы?

    @My1Name Автор вопроса
    Только так:
    String imgName;
    for(byte i=0; i<arrayImages.size();i++) {
    imgName = arrayImages.get(i).getOriginalFilename().toLowerCase();
    if (imgName.isBlank())
        removeSlide(i);
    else if (imgName.indexOf("s-1.")!=-1 || imgName.indexOf("s-2.")!=-1 ||
             imgName.indexOf("s-3.")!=-1 || imgName.indexOf("s-4.")!=-1) {
    	 assert true; // file exists. Nothing to do.
    	}
    else {
     	imgName = setCorrectName(imgName, i);
    	if (imgName!=null) {
           // some code...
            }
    }

    Пробовал разные варианты из ответов... Хотел заменить indexOf() на регулярное выражение matches но оно ни в какую не хочет корректно работать.
    Ответ написан
    Комментировать
  • Как установить имя (value) для input type=file?

    @My1Name Автор вопроса
    var x = 1;
    const fInput = document.querySelectorAll('input[type="file"]');
    Array.from(fInput).forEach(function(el){
    	if(el.getAttribute('id')==x && x<=items.length){
    	   let f = items[x-1];
    	   let fileTMP = new File (['Empty file'], f,{
    	      type : 'text/plain', lastModified : new Date(),
    	   });
    	   const dataTransfer = new DataTransfer();
    	   dataTransfer.items.add(fileTMP);
    	   el.files = dataTransfer.files;
    	   if(el.webkitEntries.length)
    	     el.dataset.file = '{dataTransfer.files[0].name}';
    	   x++;
    	}
    });
    Ответ написан
  • Зачем создавать слой с интерфейсами?

    @My1Name
    При проектировании, без интерфейсов, очень трудно представить весь объём работ для той или иной задачи. Интерфейсы по большому счёту, вкратце описывают алгоритм всей программы. Это шаблон проектирования, который позволяет при необходимости менять части программы (реализацию).

    изучая чужие проекты написанные на java spring boot

    Если долго гуглить уроки при изучении Spring-а, то можно найти много примеров, которые на самом деле ничего не делают, а посредством интерфейсов объясняют принцип работы. Именно для этого они и нужны.
    Ответ написан
    Комментировать
  • Как при удачной авторизации изменить кнопку Log In на кнопку Log Out и скрыть кнопку от обычных пользователей?

    @My1Name
    Вам нужен CustomAuthenticationProvider, а не CustomUserDetails. Там делегируются права (role) пользователям при аутентификации.

    Вот это вот лишнее:
    @PostMapping("/process_register")
        public String processRegister(User user) {
            BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
            String encodedPassword = passwordEncoder.encode(user.getPassword());
            user.setPassword(encodedPassword);
            user.setRole("USER");
            userRepo.save(user);
            return "register_success";
        }

    Возможно имеет смысл в экспериментальных (в учебных) целях, но на практике это лишнее... PasswordEncoder достаточно добавить 1 раз через RegisterGlobalAuthentication в классе WebSecurityConfig; а также добавив соответствующий бин:
    @Bean
    public PasswordEncoder pass(){
    return new BCryptPasswordEncoder();
    }

    После регистрации, если она прошла успешно, обычно делается autoLogin через SecurityContextHolder и return "redirect:/index";

    Если вы хотите шифровать данные в БД, то имеет смысл вынести BCryptPasswordEncoder() в глобальную переменную (в final поле) на уровне класса - контроллера.

    Смысл PasswordEncoder() в Spring Security заключается в том, что на время сессии создаётся "хэш-отпечаток" (цифровая подпись) кроме прочей информации в памяти... Его в принципе невозможно декодировать не зная реальный пароль и правила преобразования. Поэтому без него Spring Security и не работает.

    Вот старая модель CHA-1 кодирования в соответствии со спецификацией Oracle к PasswordEncoder. А BCryptPasswordEncoder использует более новые и более продуманные алгоритмы.
    Ответ написан
    Комментировать
  • Как реализовать CORS в Reactor Netty?

    @My1Name
    возможно, вы знаете другие способы обработки запросов помощников CORS?

    Spring Security
    https://stackoverflow.com/a/57081659/15454143
    Посмотри настройки для старых версий.
    Ответ написан
    Комментировать
  • Обрабатывается несколько рас запрос ajax?

    @My1Name
    Оберните участок кода (в какой-нибудь ID). Например:
    <div id="myID">
    <div class='menuline' data1=''></div>
    <div class='menuline' data1=''></div>
    <div class='menuline' data1=''></div>
    </div>

    Добавьте правильно обработчик событий:
    $("#myID").click(function (event){
      if(event.target.closest('.menuline')){
     $.ajax({
    .....
    Ответ написан
  • Как реализовать задачу “Надеть” вещи из каталога на фото клиента в нужной локации?

    @My1Name
    Теоретически это можно сделать, если клиент пришлёт фото на белом фоне (или подходящем под хромакей). По фото масштабируется тело и подбирается 3D модель, на которую натягивается фейс-текстура клиента и заранее подготовленная модель одежды... Далее всё это дело можно отобразить используя какой-нибудь движок, типа three.js или Unity 3D.

    https://humanaigc.github.io/animate-anyone/

    На практике всё гораздо сложнее. Потому что нужно не аниме или красивую картинку показывать (с помощью какой-то нейросети..), а реально то, как сидит та или иная вещь на теле клиента. Например, если капризная женщина купит таким образом красивое платье, которое в реальности будет выглядеть на ней как мешок, то она в лучшем случае вернёт товар, а в худшем - подаст в суд.
    Ответ написан
    1 комментарий
  • В каком контексте значение класса String является неизменяемым в отличии от StringBuilder?

    @My1Name
    Массив — структура данных хранящая набор значений, в простейшем случае фиксированой длины. Массивы не всегда удобно использовать, поэтому ряд языков программирования поддерживают динамические массивы и, Java один из таких языков. ⇨ Данные типа String - это массив char-ов в таких языках как Pascal, C, C++, Java и др.. В Java все строковые литералы помещаются в специальный объект (класс) под который выделяется память, а уже адрес этого объекта помещается в переменную, под которую тоже выделяется память. Java коллекции расширяют возможности работы с массивами и это пожалуй ответ на все ваши вопросы.
    https://javarush.com/quests/lectures/questsyntaxpr...

    Например, если вы заполните HashSet<String> то сможете проверить наличие определенного String-а в массиве строк, заменив s.equals(sb) на list.contains(sb) Такой код будет работать в оперативной памяти используя hashcode (32 битный идентификатор объекта). Это работает быстро и эффективно, так как числовые значения гораздо легче и быстрей сравнить. Однако, каждая строка будет представлять собой отдельный объект и занимать свою ячейку в памяти.

    При конкатенации происходит приблизительно то же самое: Создаётся массив, где каждая строка - это отдельный объект (массив) разного размера. В момент конкатенации создаётся новый объект типа String с размером == сумма двух String и + 2 объекта "склеивания". А если у нас таких операций (итераций) много, то велика вероятность получить outofmemoryerror прежде чем GC (сборщик мусора) успеет собрать все созданные объекты.

    В отличие от языков C/C++ в Java нет доступа к памяти. Программист не может удалить "cell memory" хранящую ссылку на объект и в этом нет необходимости. Эту работу выполняет Garbage collectors (GC) а вся работа с памятью происходит только через Java-машину (JVM).

    С целью экономии памяти, начиная с версии JDK 5 для работы со String-ами в Java имеется StringBuilder. Таким образом у нас всегда один объект, который пропорционально заполненяет StringBuffer, подобно HashSet<String> но с одной ("резиновой") ячейкой в памяти.
    https://docs.oracle.com/javase/8/docs/api/java/lan...
    Ответ написан
    1 комментарий
  • Есть сервера, которые стоит написать именно на Java, а не на Node?

    @My1Name
    Обычно в Node.js весь код на JavaScript выполняется в одном потоке. Для асинхронного выполнения задача помещается в очередь задач. Иными словами, при создании 1000+ сокет соединений, JS будет создавать очередь и тормозить. И это ограничение производительности распространяется буквально на всё, в том числе при работе с файлами, а не только на REST приложения.

    JavaScript — это высокоуровневый ЯП, а компьютер понимает только единицы и нули. Проще говоря, JS проходит через интерпретатор, который построчно преобразует исходный код в эквивалентный машинный код.

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

    Плюсы и минусы интерпретатора и компилятора

    Кроме того, невзирая на все нарекания фронтов, гораздо проще и удобней использовать jQuery в сочетании с Ajax и Java сервером, когда речь идёт о web разработке.
    Ответ написан
    8 комментариев
  • Как найти все углы относительно заданного?

    @My1Name
    Интересная задача.
    Похожа на закон сохранения импульса
    Как найти все углы относительно заданного?

    Сумма всех углов есть величина постоянная == 360 делить на количество векторов... Угол меняется относительно системы отсчёта. То есть, вам нужно задать начало координат. Таким образом, если вектор тела равен углу 90°, то один из 6 векторов будет иметь отрицательное значение.
    Ответ написан
    Комментировать
  • Как после редактирования в модальном окне сохранить данные в БД?

    @My1Name
    Ваш ajax запрос неправильный (пустой).
    $.ajax({
    		success: function(data){
    			//console.log(data);
    			if(data) {
    				//console.log('Success');
    				$("#form-content").load("/page/edit-com.php?redCom_id=" + comId, function(response){
    ....

    Вы ожидаете получение данных без указания адреса (метода) выполнения. Вот это вот: redCom_id=" + comId должно быть передано в теле запроса. Примерно так:
    $.ajax({
    url : 'address/to-do-something',
    method : 'GET',
    data : {redCom:comId},
    success : function(response){
    ....

    В вашем случае, возможно будет достаточно обратиться по адресу:
    $.get('/page/edit-com.php?redCom_id=' + comId, function(response){
        .....
    });
    Ответ написан