Ответы пользователя по тегу Java
  • Что значит "отсутствует главный метод для test.Test"?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Означает, что отсутствует метод main, который вы написали некорректно.
    (вы забыли передать аргументы методу)
    должно быть
    public static void main (String[] args)
    вместо
    public static void main()
    Ответ написан
    Комментировать
  • Enum что не так?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Hint: You will need to rewrite or cast the expression.

    тут даже дали подсказку, вам нужно привести значение к типу Enum.
    В Spring эта "проблема" решается довольно простым образом... вы можете сразу принять параметр типа Enum. А в вашем случае, как я понял, хоть вы и вкладываете тип enum в шаблон, но получаете обычную строку (String).
    Соответственно, вам нужно эту строку преобразовать к типу enum. Кстати, что-то в вашем сниппете я не вижу, где вы при помощи сеттера устанавливаете значение....

    preparedStatement.setGendertype(4, gendertype.valueOf(gender));

    что-то типа такого должно сработать...
    или же как вариант явно привести тип String к типу Enum
    Ответ написан
  • На чем лучше делать мобильное приложение - на Java или JavaScript (ReactNative)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    потом желательно без радикального переписывания - на ios.

    React Native

    Если вам нужна нативная поддержка андроид, то однозначно Java || Kotlin.
    Ответ написан
    Комментировать
  • Кака при нажатии на кнопку перенаправить на форму редактирования?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Приветствую)))

    Начнем с простого...

    Чтобы удалить запись (пользователя) нет необходимости оборачивать кнопку в form (можно и попроще сделать). Простой вариант - используя GET запрос отправляете запрос на URL вида (например,users/delete/12345), где 12345 это ID пользователя. Далее получаете pathvariable из урла (id - 12345) и находите по нему пользователя и в метод удаляющий пользователя передаете id пользователя. Тогда вам не нужно будет оборачивать эту кнопку в form, добавлять action, передавать csrf и т.д.

    У вас сейчас получается так, что для каждого пользователя генерируется набор кнопок "Удалить" и "Изменить" и это все обернуто в form. Получится, что у вас на одной странице 100 пользователей и 100 форм. Это не есть хорошо на самом деле... (но и не является ошибкой). Просто, смысл плодить лишние теги, лишние узлы и т.д.

    Идем дальше...

    ... под выбранным полем в таблице вылезало окно редактирования я бы вносил изменения и после при нажатии на кнопку данные уходили ...


    Окно редактирования, которое "вылезает" называется модальным окном. Если ваш дизайн использует bootstrap, то посмотрите bootstrap modal. Или вы можете использовать любую модалку на jquery.

    Внимание! Без знаний js & jquery вы не сможете настроить то, что вы хотите.
    Причина - когда производится клик на кнопке, вам нужно в открывшееся модальное окно передать id пользователя, которого вы хотите изменить. Можете например, в модалке добавить input hidden.
    <input type="hidden" name="id" val="" id="userId">
    По факту, вам не нужна форма для кнопки "Изменить" тоже. По нажатию кнопки "Изменить" открываете модалку и в модалку передаете ID пользователя в вышеуказанный инпут. А уже блок с полями модалки обернут в одну форму.

    Чтобы не быть голословным покажу простой пример:

    Пример таблицы, как должно выглядеть:
    <table style="width:100%">
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Age</th>
        <th>Действие</th>
      </tr>
      <tr>
        <td>Jill</td>
        <td>Smith</td>
        <td>50</td>
        <td>
        	<a href="/users/delete/12345">Удалить</a>
        	<a href="#" class="editUser" data-userId="12345">Изменить</a>
        </td>
      </tr>
      <tr>
        <td>John</td>
        <td>Smith</td>
        <td>30</td>
        <td>
        	<a href="/users/delete/8976">Удалить</a>
        	<a href="#" class="editUser" data-userId="8976">Изменить</a>
        </td>
      </tr>
    </table>

    Как видите в таблице с пользователями вообще нет формы.

    Потом на страницу добавляете модалку. Покажу на примере бутстрапа -

    <table style="width:100%">
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Age</th>
        <th>Действие</th>
      </tr>
      <tr>
        <td>Jill</td>
        <td>Smith</td>
        <td>50</td>
        <td>
        	<a href="/users/delete/12345">Удалить</a>
        	<a href="#" class="editUser" data-userId="12345">Изменить</a>
        </td>
      </tr>
      <tr>
        <td>John</td>
        <td>Smith</td>
        <td>30</td>
        <td>
        	<a href="/users/delete/8976">Удалить</a>
        	<a href="#" class="editUser" data-userId="8976">Изменить</a>
        </td>
      </tr>
    </table> 
    
    <!-- Modal -->
    <div class="modal fade" id="userEditModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLabel">Информация о пользователе</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</span>
            </button>
          </div>
          <div class="modal-body">
          	<form id="userEditForm" action="/users/edit" method="post">
    	        <!-- тут ваши поля, куда нужно внести информацию -->
    	        <input type="text" name="username">
    	        <input type="hidden" name="userId" id="userIdHiddenInput">
    	    </form>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
            <button type="button" class="btn btn-primary" id="saveUser">Внести изменения</button>
          </div>
        </div>
      </div>
    </div>


    Дальше вы пишете js код (jquery), который и будет отправлять значения полей на нужный метод контроллера и сохранять пользователя.
    Пример сниппета:
    $( document ).ready(function() {
        
    	// По нажатию кнопки изменить передаем id пользователя на котором кликнули в скрытое поле модалки и показываем модалку
    	$(".editUser").on("click", function() {
    		// тут передали id пользователя из data-userId в hidden поле модалки
    		$("#userIdHiddenInput").val($(this).attr("data-userId"));
    
    		// показываем модалку
    		$("#userEditModal").modal();
    	});
    
    	// По нажатию кнопки "Внести изменения" в модалке отправляем содержимое формы на сервер
    	$(".editUser").on("click", function(event) { 
    		$("#userEditForm").submit();
    	});
    
    
    });


    Можно реализовать по-разному... Можно например, не плодить лишние кнопки... а вверху таблицы добавить 2 кнопки. А дальше получать id пользователя при клике на элементе ряда и передавать ее значение в модальное окно и т.д.

    Ваша текущая реализация:
    <form method="post">
      <input type="hidden" name="id" value="${user.firstName}">
      <input type="hidden" name="name" value="${user.lastName}">
      <button formaction="action1" type="submit" name="delete" value="${user.id}">Удалить</button>
      <button formaction="action2" type="submit" name="update" value="${user.id}">Изменить</button>
    </form>

    не совсем корректна, в том плане, что у вас кнопка "Изменить" отправляет форму, а нужно, чтобы она по клику показывала модалку, а дальше уже модалка в свою очередь будет отправлять содержимое формы (как я и указал выше).
    Ответ написан
  • Как перенаправить с одного jsp файла на другой jsp файл редактирования записи а уже с него перенаправить на сервлет для изменения данных в бд?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Во-первых, нет необходимости каждую из кнопок оборачивать в form, как указано ниже:
    snippet
    <form action = "" method="post">
    	<input type="hidden" name="id" value="${user.firstName}">
    	<input type="hidden" name="name" value="${user.lastName}">
    </form>
    <form method="post">
        <button type="submit" name="delete" value="${user.id}">Удалить</button>
    </form>
    <form method="post">
        <button type="submit" name="update" value="${user.id}">Изменить</button>
    </form>

    Более корректный вариант:
    <form method="post">
    	<input type="hidden" name="id" value="${user.firstName}">
    	<input type="hidden" name="name" value="${user.lastName}">
    	<button formaction="action1" type="submit" name="delete" value="${user.id}">Удалить</button>
    	<button formaction="action2" type="submit" name="update" value="${user.id}">Изменить</button>
    </form>

    Обратите внимание на атрибут - formaction="..." так вы можете внутри одной формы задать несколько разных видов actions. Внутри атрибута укажите action (url), куда должна отсылаться форма.

    Подскажите как перенаправить с одного jsp на другой для заполнения новой формы а после перенаправить данное изменение на сервлет.

    Могу предположить, что вы хотите по нажатию кнопки "Удалить" совершить POST запрос на сервер, дальше некий метод находит запись в БД и удаляет.
    А по нажатию на кнопку "Изменить" вы хотите редактировать содержимое формы. Так вот, post запрос там вообще не нужен. Для начала get запросом верните пользователю форму с инпутами, куда он должен ввести данные, дальше по клику на кнопку или инпут (submit) POST запросом отправляете введенные данные на сервер. И опять-таки метод контроллера примет данные (чтобы данные отправлялись нужно, чтобы инпуты имели name). А дальше остается найти запись по id (который у вас скрыто передается) и по нему получить объект и при помощи сеттеров добавить новые значения и сохранить
    Ответ написан
    1 комментарий
  • Как применить несколько фильтров в Hibernate?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Ведь, по сути фильтрация и есть поиск по БД. Соответственно, подключите hibernate search. А там уже есть возможность индексации + возможность задания нужных параметров, фильтров.
    https://docs.jboss.org/hibernate/stable/search/ref...
    Можно также использовать ElasticSearch.
    Ответ написан
    Комментировать
  • Как сохранить текст из полей в базу данных с Thymeleaf и Spring Boot?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    У вас выбрасывает исключение связанное с шаблонизатором thymeleaf
    + вы не указали атрибут name для инпутов
    А теперь, простой пример
    @Entity
    Car {
    	
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
      	private Long id;
    
      	private String carModel;
    
      	private String carName;
    
    	public Car() {}
    	//getters & setters & no args constructor
    }


    <form method="post" th:action="@{/cars/add}">
    	
    	<input type="text" name="carModel">
    	<input type="text" name="carName">
    	<input type="submit" value="Добавить машину">
    
    </form>

    @Autowired
    private CarRepository carRepository
    
    @PostMapping("/cars/add")
    public String addNewCar(
     @ModelAttribute("carModel") String carModel,
     @ModelAttribute("carName") String carName,
     Car car
    ) {
     // тут конечно можно в carService создать метод и передать ему эти аргументы
    	car.setCarModel(carModel);
    	car.setCarName(carName);
    	carRepository.save(car);
    
    	return "main"; 
    }


    Видео - https://www.youtube.com/watch?v=jH17YkBTpI4&list=P...
    Ответ написан
    2 комментария
  • Кто может подсказать видеокурс или книгу(с переводом на русский) для обучения java с нуля?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Практически каждую неделю или несколько раз в неделю поднимается этот вопрос)))
    proglang.su/java
    Из книг Head first (Изучаем Java) и т.д.
    https://www.youtube.com/watch?v=9Yz3unV4NDw&list=P...
    Огромное кол-во видеоматериалов на ютуб.
    Ответ написан
    1 комментарий
  • Как заполнить поле класса (класс = сущности таблицы)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Предположим, что 1 пользователь (User) может иметь несколько задач (Task). Получается, что отношения между ними @OneToMany @ManyToOne

    Этот код в Task лишний
    @Column(name = "user_name")
        @Getter
        @Setter
        private String userName;


    Простой пример тут - https://devcolibri.com/%D0%BA%D0%B0%D0%BA-%D1%81%D...

    OneToMany добавьте в User (List<Task> tasks), ManyToOne добавьте в Task (User user) и все.
    Ответ написан
    Комментировать
  • Как внести sql count в Map?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Что-то типа такого? Это на jpql
    @Query("SELECT COUNT(b) FROM Book b WHERE b.genre = ?1")
    Long booksCount(String genre);
    Ответ написан
    Комментировать
  • Имеет ли смысл учить java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Стоит ли учить java в 2019 году

    безусловно

    стоит ли учить его первым языком программирования

    по своему опыту, да... лучше начать с типизированных языков.

    JS относительно сложный язык (если не судить об уровне Vanilla & Jquery), но довольно нелпохой язык. На нем пишут десктопные приложения (ElectronJS) Например, skype, postman и т.д., он является одним из базовых языков веб-программирования, на нем можно писать бэкэнд на ноде, можно писать приложения на андроид, писать игры и т.д. Но в принципе, все вышеперечисленное можно реализовать на Java.
    Ответ написан
    2 комментария
  • На чем удобнее писать приложения на андроид?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Сперва Java, затем переходить на Kotlin,,, Все равно, большинство библиотек написаны на Java и пока перепишут на Kotlin....
    Ответ написан
    3 комментария
  • Не могу задеплоить war на внешний сервер на Tomcat?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Странно, только вчера я ответил на ваш вопрос... И он почему-то был удален и вы заново разместили этот же вопрос...
    1) Уточните пожалуйста вы собираете war или используете exploded war? Корректно ли вы собираете war в Intellij IDEA? Правда, не всегда она корректно собирается автоматически, если выбирать "From modules and dependencies"...
    2) Учли ли вы context path на удаленном tomcate? Например, если вы запускаете ваше приложение на локалке так: localhost:8080/greening то с учетом context path на удаленке будет выглядеть примерно, так localhost:8080/pathfinderPrj_war_exploded/greeting
    В application properties пропишите - server.servlet.context-path=/YoutContextPathHere
    3) Еще вчера я писал про то, что вы используете шаблонизатор thymeleaf. Соответственно, место хардкодинга ссылок типа href="/greeting"используйте его синтаксис th:href="@{/greeting}"
    Также, на будущее... если ошибка на серверной стороне будет, то можете в любое время поднять логи TomCat
    Ответ написан
    Комментировать
  • Как сделать вывод текста?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Если я вас правльно понял, то вы хотите создать консольное приложение и передавать ему command line arguments. Чтобы например, при наборе help выводилась помощь и т.д. Для этого обычно, можно использовать либу - jcommander.org
    Что касается вывода, то экранируйте кавычки System.out.print("\"Hello\"");
    Ответ написан
    Комментировать
  • Как ОС понимает, какую версию просит java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Может и не самое лучшее решение, но можно "встроить" jvm нужной версии в приложение
    https://eax.me/java-without-jvm/
    Ответ написан
    4 комментария
  • Java + Spring: какой способ API аутентификации использовать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте! Как раз сам сейчас этим занимаюсь))
    https://auth0.com/blog/implementing-jwt-authentica...
    https://medium.com/@hantsy/protect-rest-apis-with-...
    Ответ написан
    Комментировать
  • Почему не работает JavaFX?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Вот, аналогичная ошибка - https://stackoverflow.com/questions/52906773/intel...
    Ответ написан
  • Как вставить +-/* и скобки в лист, содержащий набор цифр?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Буквально пару дней назад был похожий вопрос - Проблема со скобками)))))))?
    И там были неплохие идеи, которые вы можете использовать
    Ответ написан
    Комментировать
  • Как сохранять данные из html страницы в приложении Android?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Используйте обычный sqlite и этого будет предостаточно.
    Ответ написан
  • Выдает no main manifest attribute, in project.jar, как это исправить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Скажите пожалуйста, каким IDE вы собираете проект? Если Intellij IDEA, то мне эта проблема уже знакома...
    Не раз натыкался на нее... В общем, когда вы собираете jar, то почему-то intellij idea если выбрать create jar from modules & dependencies создает jar некорректно. Эта проблема актуально до последней версии. И соответственно, в jar не попадает папка META-INF И файл MANIFEST.MF
    Чтобы это исключить создайте jar - empty
    Сама ошибка говорит о том, что в jar файле у вас нет вышеуказанного файла и папки. Тогда заработает корректно.
    Также, если это maven || gradle, то положите папку meta-inf на уровень проекта, либо в папку resources. Не в java!
    Вот, тут мой ответ по данному вопросу (со скриншотом) - https://stackoverflow.com/questions/1082580/how-to...
    Ответ написан
    1 комментарий