You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+Thymeleaf表单数据传递至用户列表页失败求助

Troubleshooting Your Spring Boot + Thymeleaf Registration Form to User List Flow

Hey there! Let's work through why your registered user data isn't showing up on the list page. I'll break down the most common pain points in your layered Spring Boot setup, step by step.

1. Make Sure Your Form Submission Controller Saves Data Correctly

First, double-check your POST controller for the registration form. It needs to:

  • Bind form data to your Register entity using @ModelAttribute
  • Save the entity via your service layer
  • Redirect to the user list page (using redirect: prevents duplicate form submissions and ensures fresh data is loaded)

Example code for your controller:

@PostMapping("/register")
public String submitRegistration(@ModelAttribute Register register) {
    // Call your service to persist the user
    registerService.save(register);
    // Redirect to trigger a fresh GET request for the user list
    return "redirect:/users";
}

Also, verify that your HTML form's name attributes match exactly with the field names in your Register class (e.g., <input name="pseudo"> maps to private String pseudo; in the entity).

2. Validate Your Service & DAO Layer Persistence

Your service should properly delegate to the DAO (repository) to save and retrieve data.

  • Ensure your RegisterRepository extends JpaRepository<Register, Long> (this gives you built-in save() and findAll() methods out of the box)
  • Your service layer should wrap these repository calls (constructor injection is preferred over @Autowired):
@Service
public class RegisterService {
    private final RegisterRepository registerRepository;

    public RegisterService(RegisterRepository registerRepository) {
        this.registerRepository = registerRepository;
    }

    public void saveRegister(Register register) {
        registerRepository.save(register);
    }

    public List<Register> getAllRegisters() {
        return registerRepository.findAll();
    }
}

Quick test: Add a debug log or check your database (use the H2 console if you're using the default H2 DB) to confirm the user is actually being saved after form submission.

3. Ensure the User List Controller Passes Data to the Model

The controller handling your user list page needs to fetch all saved users and add them to the Model so Thymeleaf can access them:

@GetMapping("/users")
public String showUserList(Model model) {
    List<Register> allUsers = registerService.getAllRegisters();
    // Add the list to the model with a key Thymeleaf will reference
    model.addAttribute("userList", allUsers);
    return "user-list"; // Match this to your Thymeleaf template filename
}

4. Check Your Thymeleaf Template for Correct Data Traversal

In your user-list.html template, make sure you're correctly looping through the model data using Thymeleaf's th:each attribute:

<div class="user-container">
    <h2>Registered Users</h2>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Pseudo</th>
                <!-- Add other entity fields here -->
            </tr>
        </thead>
        <tbody>
            <!-- Loop through the userList from the model -->
            <tr th:each="user : ${userList}">
                <td th:text="${user.id}"></td>
                <td th:text="${user.pseudo}"></td>
                <!-- Render other fields similarly -->
            </tr>
        </tbody>
    </table>
</div>

Pro tip: Add a conditional to show a fallback message if the list is empty—this helps you confirm if the model is empty or the template is broken:

<p th:if="${#lists.isEmpty(userList)}">No registered users yet!</p>

5. Fix Common Gotchas

  • Add Getters/Setters to Your Entity: Spring and Thymeleaf need these to bind form data and access entity fields. Your provided Register code doesn't include them—make sure to add getters and setters for all fields (e.g., getPseudo(), setPseudo(String pseudo)).
  • Avoid In-Memory Database Loss: If you're using H2's default in-memory setup, data disappears when your app restarts. To persist data, add this to application.properties:
    spring.datasource.url=jdbc:h2:file:./data/registration-db
    spring.h2.console.enabled=true
    
  • Use Redirect Instead of Forward: Forwarding to the list page (returning the template name directly) might reuse old model data—always use redirect:/users after form submission to trigger a fresh data fetch.

内容的提问来源于stack exchange,提问作者AdrienB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:48:34