Bidang selalu nol dalam metode Spring Boot Postmapping

Saya ingin mengikat tabel HTML saya dengan semua bidang ke kode Java di Spring Boot. Oleh karena itu, saya juga telah menjelaskan metode saya dengan Postmapping.

Saya sudah bisa menampilkan semua bidang di Thymeleaf dan saya juga bisa mengatur nilai kotak centang (true/false) yang sesuai.

Ini adalah kode HTML Thymeleaf saya:

<form action="#" th:action="@{/mitarbeiterverwaltung}" th:object="${users}" method="post">
<fieldset>
    <table border="1" align="center">
        <thead>
            <tr>
                <!-- <th:text = "#{mitarbeiterverwaltung.active}>Active ( Tick ) / Passive</th>-->
                <th>Active ( Tick ) / Passive</th>
                <th>ID</th>
                <th>Username</th>
                <th>Anzeigename</th>
                <th>Dienstnummer</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="user, itemStat : *{users}">
                <td><input  th:field="*{users[__${itemStat.index}__].isActive}"
                            th:checked="${user.isActive}"
                            class="checkBox"    
                            type="checkBox"
                            name="checkBox" 

                /></td>
                <td><input  th:field="*{users[__${itemStat.index}__].id}" 
                            readonly/></td>
                <td><input  th:field="*{users[__${itemStat.index}__].username}" 
                            readonly/></td>
                <td><input  class="anzeigename" 
                            type="text" 
                            name="anzeigename" 
                            th:field="*{users[__${itemStat.index}__].anzeigename}" 
                            th:id="${itemStat.index}" 
                            readonly/></td>
                <td><input  class="dienstnummer" 
                            type="text" 
                            name="dienstnummer" 
                            th:field="*{users[__${itemStat.index}__].dienstnummer}" 
                            th:id="${itemStat.index}" 
                            readonly/></td>
            </tr>
        </tbody>
    </table>
    <br />
    <div style="text-align:center;">
        <input type="submit" id="submitButton" th:value="Speichern"/>
    </div>
</fieldset>

And this is my Java code, where the field isActive of UserCreationDto is always null.

@PostMapping
public String updateActivePassiveUser(@ModelAttribute UserCreationDto userTableSettings,
        @RequestParam("checkBox") String checkBoxName, BindingResult result, Model model, Errors errors) {

    logger.info("Method {} called in {}", new Object() {}.getClass().getEnclosingMethod().getName(), this.getClass().getName());

    if (errors.hasErrors()) {
        logger.error("Error in {}", new Object() {}.getClass().getEnclosingMethod().getName());
        return "error";
    }

    List<Benutzer> users = userManagementServiceImpl.getAllUsers();

    userManagementServiceImpl.updateActivePassiveUser(1, 0);

    return "redirect:/mitarbeiterverwaltung?success";
}

Berikut adalah gambar field dalam kode Java yang metodenya dianotasi dengan @PostMapping

masukkan deskripsi gambar di sini

Dan begitu pula @RequestMapping saya terlihat seperti:

masukkan deskripsi gambar di sini

Ini adalah metode @RequestMapping saya:

@RequestMapping
public String showUserManagement(Model model) {
    logger.info("Method {} called in {}", new Object() {}.getClass().getEnclosingMethod().getName(), this.getClass().getName());
    List<Benutzer> users = userManagementServiceImpl.getAllUsers();
    userForm = userManagementServiceImpl.saveUserForm(users);
    model.addAttribute("users", userForm);
    return "mitarbeiterverwaltung";
}

UserCreationD saya tempat semua bidang ditambahkan ke daftar:

public class UserCreationDto {

private List<User> users = new ArrayList<>();

public void addUser(User user) {
    this.users.add(user);
}

public List<User> getUsers() {
    return users;
}

public void setUsers(List<User> users) {
    this.users = users;
}
}

Dan kelas POJO saya yang sederhana dengan semua bidangnya

@Data

   public class User {
    //@SafeHtml prevents XSS ( Cross-Site Scripting )
    @SafeHtml
    private String username;
    private String password;
    private String anzeigename;
    private String dienstnummer;
    private long id;
    private Boolean isActive;
}

Bidang lain seperti anzeigename, dienstnummer, id, dan nama pengguna diisi dalam kode Java saya, namun isactive selalu null.

Mungkin, seseorang dapat memberi tahu saya kesalahan apa yang saya lakukan di sini.

Terima kasih banyak sebelumnya.


person Bernd    schedule 23.12.2018    source sumber
comment
bagaimana dengan mencoba REST API Anda dengan Tukang Pos untuk memastikan Aplikasi Spring Boot berfungsi dengan baik?   -  person IEE1394    schedule 24.12.2018
comment
Saya sudah melakukan itu tetapi ketika mengirimkan permintaan saya, saya selalu mendapatkan halaman login saya terlebih dahulu. Saya belum terbiasa dengan Spring Boot dan Postman dan saya masih belajar.   -  person Bernd    schedule 24.12.2018
comment
jadi tambahkan basicauth ke konfigurasi keamanan pegas Anda dan coba dengan tukang pos terlebih dahulu ... jika REST API berfungsi maka Anda dapat mengerjakan frontendnya .. jika tidak maka akan sulit... hal lain mungkin adalah alat pengembang browser Anda. .. Anda mendapatkannya dengan menekan F12 untuk chrome dan firefox saya kira .. setelah memuat ulang halaman Anda dapat melihat permintaan Anda yang dikirim oleh browser ...   -  person IEE1394    schedule 24.12.2018


Jawaban (2)


Saya pikir Anda harus mengatur banyak pilihan. Anda tidak perlu th:diperiksa:

<input  th:field="*{users[__${itemStat.index}__].isActive}"
        class="checkBox"    
        type="checkBox"
        name="checkBox" />
person Simon Martinelli    schedule 23.12.2018
comment
Terima kasih atas bantuan Anda, tapi saya tidak punya masalah dengan kode HTML. Saya rasa masalah saya ada pada kode Java saya. Saat mengirimkan formulir, bidang saya isActive dalam @ModelAttribute UserCreationDto userTableSettings selalu nol. - person Bernd; 23.12.2018

Saya menemukan cara lain sekarang, tetapi itu tidak terlalu bagus.

@PostMapping
public String updateActivePassiveUser(@Valid @ModelAttribute("userForm") UserCreationDto userTableSettings,
        @RequestParam List<String> searchValues, BindingResult result, Model model, Errors errors) {

Bidang searchValues ​​berisi semua kotak centang yang dicentang. Ini pandangan saya:

<td><input  type="checkbox"
    name="searchValues"
    th:value="${user.id}"
    th:checked="${user.isActive}"
/>

Sekarang, satu-satunya masalah yang saya alami adalah bagaimana cara memperbarui kolom saya yang bertipe Boolean di Postgresql?

Untuk menyelesaikan tugas ini saya menyebutnya:

userRepo.updateActivePassiveUser(new Boolean("False"), id);

@Modifying
@Query(value = "UPDATE benutzer SET active = :active WHERE id = :id", nativeQuery = true)
@Transactional
void updateActivePassiveUser(@Param("active") Boolean active, @Param("id") long id);

Namun, nilai dalam database saya tidak pernah berubah.

Mungkin, seseorang bisa memberi saya petunjuk terakhir!

person Bernd    schedule 24.12.2018