рд╕реНрдкреНрд░рд┐рдВрдЧ, рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг, рдкреАрдпреВрдЯреА рдкрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

рдереЛрдбрд╝рд╛ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдПрдХ рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЫрд╛рддреНрд░ рд╣реВрдВ рдФрд░ "рдЬрд╛рд╡рд╛-рдбреЗрд╡рд▓рдкрд░" рдХрд╛ рдХреЛрд░реНрд╕ рдХрд░рддрд╛ рд╣реВрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ, рдореИрдВ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рддрд╛ рд╣реВрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдордИ 2019 рдореЗрдВ рдЬрд╛рд╡рд╛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рджрдо рдкрд░ HTML, CSS рдФрд░ JS рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдПрдХ рдЬрд╛рдЧрд░реВрдХрддрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рджреГрд╢реНрдпрдкрдЯрд▓ рдПрдХ рд╕рд╛рде рдмреИрдХреЗрдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ PUT рдЕрдиреБрд░реЛрдз рдХреА рд╕рдордЭ рдХреА рдХрдореА рд╣реИред рд╣рд░ рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ "google" рдХрд┐рдпрд╛ рдерд╛, рдмрд╛рдХреА API рдХреЛ POST рдФрд░ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХрднреА-рдХрднреА DELETE рдХреЗ рд╕рд╛рде рдФрд░ рдлрд╝реНрд░рдВрдЯреЗрдВрдб рдХреЗ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдереЗред рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЙрд╕реА рддрд░рд╣ REST API рдХреЛ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рд╕рдордЭ рдореЗрдВ рдЖрдПред рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рди рдХреЗрд╡рд▓ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдмрд▓реНрдХрд┐ рдореИрдВ рд╡рд╕рдВрдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдореИрдВ рдкреБрд░рд╛рдиреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдХреА рдзрд╛рд░реНрдорд┐рдХ рд╢рд┐рдХреНрд╖рд╛рдУрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ (рдЕрдиреБрднрд╡ рдХреА рдХрдореА рдкрдврд╝реЗрдВ)ред

рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреАрдпреВрдЯреА рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдЕрд░реНрдерд╛рддреН, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВ POST рдФрд░ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдорд╛рдирдХ CRUD (рд╕рд╣реА рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ)ред рдФрд░ рдереЛрдбрд╝рд╛ рдлреНрд░рдВрдЯрдПрдВрдб рднреА рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИред

рдореИрдВрдиреЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

  • Maven
  • рдорд╛рдИ рдПрд╕рдХреНрдпреВрдПрд▓
  • рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбрд┐рдпрд╛

рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдерд╛, рдореИрдВрдиреЗ PUT рдФрд░ DELETE рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ GitHub рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдПрдХ рдЫреЛрдЯреА рд╕реА рд▓рд╛рдЗрд╡ рд╣реИрдХ: рдорд╛рд╡реЗрди рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдЬрд╛рд╡рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд╛рдВрдЪрд╡реЗрдВ рдкрд░ рдХреВрджрддрд╛ рд╣реИ, рдЗрд╕реЗ pom.xml рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕рдВрдЦреНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

рдУрдкрди рд▓рд╛рдЗрдл рд╣реИрдХ
<properties>
    <maven.compiler.target>11</maven.compiler.target>
    <maven.compiler.source>11</maven.compiler.source>
</properties>


рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, pom.xml рдореЗрдВ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЖрдЧреЗ рдХрдиреЗрдХреНрд╢рди рд╕рдВрд╕реНрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.4.RELEASE</version>
</parent>

рдЕрдм рд╣рдо рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ


рдЖрдкрдХреЛ рд╕рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддреН src / main / java / main , рд╣рд╛рдВ, рдпрд╣ рд╕рд╣реА рд╣реИ, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордп рдХреЗ рд╕рд╛рде рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ред

рдФрд░ рддреБрд░рдВрдд рдЖрд╡реЗрджрди рдХреА рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ред

рдЫрд╡рд┐

рдкрд╣рд▓реА рдмрд╛рдд рдореИрдВрдиреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Main.java рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдерд╛ @SpringBootApplication:

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

рдФрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рди рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЗрд░рд╛ рд╕рд░реНрд╡рд░ рднреА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛!

рдЫрд╡рд┐

рдкреЛрд░реНрдЯ 8080 рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдк рдкрддреЗ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ http://localhost:8080/рдФрд░ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ 404 рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рддрдХ рдХреЛрдИ рдкреЗрдЬ рдирд╣реАрдВ рд╣реИред

рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рджреГрд╢реНрдпрдкрдЯрд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред HTML рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ pom.xml

рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, index.html src / main / resource / рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкреЗрдЬ рд╢реБрд░реВ рдХрд░реЗрдВ ред

рдпрд╣рд╛рдБ рдРрд╕реЗ рд╕рд╛рджреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ToDo List</title>
    <script src="/js/jquery-3.4.0.min.js"></script>
    <script src="/js/main.js"></script>
    <link rel="stylesheet" type="text/css" href="/css/styles.css">
</head>
<body>
    <div id="todo-form">
        <form>
            <label> :
            </label>
            <input id="todo-form-name" type="text" name="name" value="">
            <label>:
            </label>
            <input id="todo-form-description" type="text" name="description" value="">
            <label>  :
            </label>
            <input id="todo-form-date" type="date" name="date" value="">
            <hr>
        </form>
    </div>
    <h1> </h1>
    <button id="show-add-todo-list"> </button>
    <br><br>
    <div id="todo-list">

    </div>
</body>
</html>


рд╣рдо src / main / Resources / static / css рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рднреА рд╕реНрдЯрд╛рдЗрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, style.css рдмрдирд╛рддреЗ рд╣реИрдВ

рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ
* {
    font-family: Arial, serif;
}

#todo-form {
    display: none;
    align-items: center;
    justify-content: center;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10;
    background-color: #88888878;
}

#todo-form form {
    background-color: white;
    border: 1px solid #333;
    width: 300px;
    padding: 20px;
}

#todo-form h2 {
    margin-top: 0;
}

#todo-form label {
    display: block;
}

#todo-form form > * {
    margin-bottom: 5px;
}

h4 {
    margin-bottom: 0;
}


рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ http://localhost:8080/рдФрд░ рдЖрдк рдкреНрд░рд╛рд░рдВрдн рдкреГрд╖реНрда рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм рддрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗред

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ src / main / Resources / static / js рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ jQuery рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде , рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА jQuery рдФрд░ main.js рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛ рдЬреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ ред
рдЬрд╛рд╡рд╛ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рд╕рдорд╛рди рд╣рдм, рдЗрд╕рд▓рд┐рдП рдкреВрд░реНрдг рдХреЛрдб js рдХреЗ
рд▓рд┐рдВрдХ
рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗ: jquery-3.4.0.min.js рд▓рд┐рдВрдХ рдХреЛ main.js рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред

рдиреАрдЪреЗ GET рдФрд░ PUT рдЕрдиреБрд░реЛрдз рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд╕реЗ, рдФрд░ рдлреНрд░рдВрдЯреЗрдВрдб рд╕реЗред

рдЕрдм рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлреНрд░рдВрдЯреЗрдВрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреА (рдРрдб рдмрдЯрди рдлреЙрд░реНрдо рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ)ред

DB рдмрд╛рддрдЪреАрдд


рдЕрдЧрд▓рд╛ рдЪрд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

рдФрд░ src / main / java / main / рдореЙрдбрд▓ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдореИрдВ рдПрдХ POJO рдХреНрд▓рд╛рд╕ рдЯреЛрдбреЛ рдмрдирд╛рддрд╛ рд╣реВрдВ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдВ @Entityред

рд╣рдо рдЦреЗрддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛: рдЖрдИрдбреА, рдирд╛рдо, рд╡рд┐рд╡рд░рдг, рддрд┐рдерд┐ред

рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди setDate(), рдореИрдВрдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЗрдирдкреБрдЯ рдкрд░, рдФрд░ рдлрд┐рд░ java.util.Date рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдпрд╛ , рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ atStartOfDay().atZone(ZoneId.of("UTC"), рдореИрдВ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ:

package main.model;

import javax.persistence.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;

@Entity
public class Todo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private String description;
    @Temporal(TemporalType.DATE)
    private Date date;

    //getters and setters тАж
   
    public void setDate(String date) {
        this.date = Date.from(LocalDate.parse(date).atStartOfDay().atZone(ZoneId.of("UTC")).toInstant());
    }
}

MySQL рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pom.xml рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ :

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>

Src / main / resource рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, application.properties рдмрдирд╛рдПрдБ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВ:

spring.datasource.url=jdbc:mysql://localhost:3306/todolist?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=none

рдЕрдм рдЪрд▓реЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред Src / main / java / main / рдореЙрдбрд▓ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, рдПрдиреЛрдЯреЗрд╢рди @RepositoryрдФрд░ рдЗрдирд╣реЗрд░рд┐рдЯ CrudRepository <Todo, Integer> рдХреЗ рд╕рд╛рде TodoRepository рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБ ред рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ - рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдмреАрдЪ рдПрдХ рдЧреИрд╕рдХреЗрдЯ рд╣реИ, рд╡рд╕рдВрдд рдЗрд╕ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕реЙрдХреЗрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред

package main.model;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TodoRepository extends CrudRepository<Todo, Integer> {
}

рджрд░рдЕрд╕рд▓, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛ред

рдЕрдм рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдЬрд╣рд╛рдВ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рд╕реЗ рдЕрдиреБрд░реЛрдз, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдФрд░ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред Src / main / java / main / рдХрдВрдЯреНрд░реЛрд▓рд░

рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде TodoController рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ , TodoRepository рд╡реЗрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред рдЪрд▓рд┐рдП POST рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЯреЛрдбреЛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдРрдб () рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯ (рдЖрдИрдбреА) рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣рдо рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЯреЛрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред рдмрд╕ рдЬрд╛рджреВ рд╣реИред@RestController

@PostMapping(тАЬ/todo-list/тАЭ)save()

@PostMapping("/todo-list/")
public int add(Todo todo) {
    Todo newTodo = todoRepository.save(todo);
    return newTodo.getId();
}

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, GET рдФрд░ DELETE рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди ResponseEntity рд╢реЗрд▓ рдореЗрдВ рдЖрдИрдбреА рдФрд░ рд░рд┐рдЯрд░реНрди рдЯреЛрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ get()рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдиреАрдЪреЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рд╣реИред рддрдм рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ ResponseEntity.ok(todoOptional.get());, рдЕрд░реНрдерд╛рдд, рдХреЛрдб 200, рдпрд╛ рдпрджрд┐ рдпрд╣ рдЗрд╕ рдЖрдИрдбреА рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб 404 рдмреЙрдбреА рдирд▓ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

@GetMapping("/todo-list/{id}")
public ResponseEntity<Todo> get(@PathVariable int id){
    Optional<Todo> todoOptional = todoRepository.findById(id);
    if(todoOptional.isEmpty()){
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
    }
    return ResponseEntity.ok(todoOptional.get());
}

рдЖрдЧреЗ рдХреА рддрд░рдл рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

GET рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

todo => рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╣рдо id todo рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ => рдПрдХ рдЕрдиреБрд░реЛрдз рдмрдирддрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдИрдбреА рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА) () рд╡рд┐рдзрд┐ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдорд╛рди = / / todo- рд╕реВрдЪреА / {id}ред ") рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ @PathVariableрд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ) => рдЙрддреНрддрд░ рдПрдХ рдЯреЛрдбреЛ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ => рд╕рд╛рдордиреЗ рд╡рд╛рд▓рд╛ рд╡рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реЗ рдлрд┐рдЯ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреЛрдбреЛ рд╡рд┐рд╡рд░рдг рдФрд░ рддрд╛рд░реАрдЦ рдЦреЛрд▓рддрд╛ рд╣реИред

рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ main.js, GET рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
$(document).on('click', '.todo-link', function(){
    var link = $(this);
    var todoId = link.data('id');
    $.ajax({
        method: "GET",
        url: '/todo-list/' + todoId,
        success: function(response)
        {
            if($('.todo-div > span').is('#' + todoId)){
                return;
            }
            link.parent().append(codeDataTodo(response, todoId));
        },
        error: function(response)
        {
            if(response.status == 404) {
                alert('  !');
            }
        }
    });
    return false;
});


рдЖрдЗрдП рдПрдХ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрдн рдкреГрд╖реНрда рдкрд░ рддреБрд░рдВрдд рдЯреВрдбреВ-рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯреЛрдбреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЯреЙрдбрд▓рд┐рд╕реНрдЯ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ:

@Controller
public class DefaultController {
    @Autowired
    TodoRepository todoRepository;
    @RequestMapping("/")
    public String index(Model model){
        Iterable<Todo>  todoIterable = todoRepository.findAll();
        ArrayList<Todo> todoList = new ArrayList<>();
        for(Todo todo : todoIterable){
            todoList.add(todo);
        }
        model.addAttribute("todoList", todoList);
        return "index";
    }
}

Index.html рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде, todoList рдХреА рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ:

<html lang="en" xmlns:th="http://www.thymeleaf.org">

<div id="todo-list">
    <div class="todo-div" th:each="todo : ${todoList}" th:attr="id=${todo.id}">
        <a href="#" class="todo-link" th:attr="data-id=${todo.id}" th:text="${todo.name}"></a>
        <br>
    </div>
</div>

PUT рдЕрдиреБрд░реЛрдз


TodoController рдореЗрдВ, рд╣рдо рдЗрдирдкреБрдЯ рдореИрдк рдкрд░ put()рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ @PutMapping<рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕реНрдЯреНрд░рд┐рдВрдЧ> рдПрдХ рдПрдиреЛрдЯреЗрд╢рди @RequestParamрдФрд░ рдПрдХ рдЗрдВрдЯ рдХреЗ рд╕рд╛рде, рдЬреЛ рдорд╛рди рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреЛрдбреЛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ ResponseEntity рдореЗрдВ рд▓рд┐рдкрдЯреЗред рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреА рдЕрдкрдбреЗрдЯ () рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИ:

рдЯреЛрдбреЛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ todoRepository рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ = рдирдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЯреЛрдбреЛ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ = рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ => рдлреНрд░рдВрдЯрдПрдВрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ

@PutMapping(value = "todo-list/{id}")
public ResponseEntity<Todo> put(@RequestParam Map<String, String> mapParam, @PathVariable int id){
    Optional<Todo> todoOptional = todoRepository.findById(id);
    if(todoOptional.isEmpty()){
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
    }
    todoOptional.get().setName(mapParam.get("name"));
    todoOptional.get().setDescription(mapParam.get("description"));
    todoOptional.get().setDate(mapParam.get("date"));
    todoRepository.save(todoOptional.get());
    return ResponseEntity.ok(todoOptional.get());
}

рдЗрд╕ рд╕рдордп рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░:

"рдЪреЗрдВрдЬ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ => рдЯреЛрдбреЛ рдбреЗрдЯрд╛ рдХреЛ рддрддреНрд╡ рд╕реЗ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ => рдХреЗрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдХреЛ рдПрдбрд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдлреЙрд░реНрдо рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрдЯрди рдХреЛ рдЗрдирдкреБрдЯ рд╡реИрд▓реНрдпреВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреЙрдбрд▓ рдбреЗрдЯрд╛) => рдлреЙрд░реНрдо рдХреЛ рдУрдкрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ => рдЪреЗрдВрдЬ рдХрд╛ рдбреЗрдЯрд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред => рдлрд╝реЙрд░реНрдо рдореЗрдВ "рдмрджрд▓реЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ => рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ => рдПрдХ рдкреБрдд рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ (рдкрде, рдбреЗрдЯрд╛) => рд╕рдВрд╢реЛрдзрд┐рдд рдЯреЛрдбреЛ рд╡рд╕реНрддреБ рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде => рджреГрд╢реНрдпрдкрдЯрд▓ рд╡рд╣ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ main.js, PUT рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
//Update _todo and show updating _todo form
$(document).on('click', '#show-update-todo-list', function(){
    var buttonUpdate = $(this);
    var todoId = buttonUpdate.data('id');
    var todoName = buttonUpdate.data('name');
    var todoDescription = buttonUpdate.data('description');
    var todoDate = buttonUpdate.data('date');
    todoFormNameAndButton(' ', '', 'update-todo');
    todoInputValue(todoName, todoDescription, todoDate);
    $('#todo-form').css('display', 'flex');
    $('#update-todo').click(function() {
        var data = $('#todo-form form').serialize();
        $.ajax({
            method: "PUT",
            url: '/todo-list/' + todoId,
            data: data,
            success: function(response) {
                $('#todo-form').css('display', 'none');
                response.date = response.date.slice(0,10);
                $('.todo-div#' + todoId  + ' > a').text(response.name);
                $('.todo-div#' + todoId +' > span').replaceWith(codeDataTodo(response, todoId));
            }
        });
        return false;
    });
});


рдЖрдк рдЦреБрдж рдХреЛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдпрд╣ рд╢реБрд░реБрдЖрддреА рд╕реЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдЙрддрдирд╛ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ рдореИрдк <рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕реНрдЯреНрд░рд┐рдВрдЧ> рдкреАрдпреВрдЯреА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддреЗ рд╕рдордп рдирд┐рдпрдВрддреНрд░рдХ рдкрдХреНрд╖ рдкрд░ рдЖрддрд╛ рд╣реИ, рдореИрдВ рдХреНрдпреЛрдВ рдЯреЛрдбреЛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рд╕рдВрд╕рд╛рдзрди:


All Articles