Spring MVC如何将数据库中的数据显示到表中


问题内容

我对SPRING MVC还是很陌生,所以到目前为止我真的还不太了解。我想在表格视图中显示数据库中的所有字段,我该怎么做?

在我的控制器中

@RequestMapping(value = "task", method = RequestMethod.GET)
  public String taskList(Map<String, Object> model) {
            model.put("task", taskRepository.findAll());
        return "/tasks/list";
      }

我的jsp:

<%@include file="/WEB-INF/views/includes/header.jsp"%>

<h4 class="form-header">${title}</h4>

<div class="forms col-md-12 bounceInDown mainContent" data-wow-delay="0.2s">



<table class="table table-striped">
  <thead>
    <tr>
      <th>Task ID</th>
      <th>Task Name</th>
      <th>Task Description</th>
    </tr>
  </thead>
  <tbody>
    <c:if test="${empty task}">
      <tr>
        <td colspan="8">No task to Display</td>
      </tr>
    </c:if>
    <c:if test="${not empty task}">

      <c:forEach items="${tasks}" var="task">
        <tr class="">
          <td>${task.taskid}</td>
          <td>${task.taskName}</td>
          <td>${task.taskDescription}</td>
          <td>
            <fmt:message key="task.list.status.text.${task.status}" />
          </td>

        </tr>
      </c:forEach>
    </c:if>
  </tbody>
</table>
</div>

<%@include file="/WEB-INF/views/includes/footer.jsp"%>

我的任务中没有任何内容


问题答案:

对于初学者:

@RequestMapping(value = "task", method = RequestMethod.GET)
public String taskList(Map<String, Object> model) {
        model.put("task", taskRepository.findAll());
        return "/tasks/list";
  }

您应该返回创建的某些对象而不是String值。假设您想将两个字段传输到您的页面,则将它们分别命名为 field1field2
。现在创建您的数据传输对象:

public class MyEntityDto{
  private String filed1;
  private String field2;
  //Getter and setter method
  .
  .
  .
}

现在,您的控制器应如下所示:

@Autowired
SomeSevice someService;

@RequestMapping(value = "task", method = RequestMethod.GET)
@ResponseBody 
public List<MyEntityDto> taskList(Map<String, Object> model) {
    List<MyEntityDto> dtoList = someService.findALl();
    return dtoList;
  }

另一方面,您的服务应如下所示:

@Service
public class SomeService(){
  @Autowired 
  TaskRepository taskRepository;

  public List<MyEntityDto> findAll(){
    return assemblyTasks(taskRepository.findAll());//TODO implement method assemblyTasks
  }
}

请注意,我将您的存储库使用情况放入服务中,这是应该完成的方式。您应该使用服务来从数据库中获取数据,然后要使用针对该目的对象(数据传输对象)的专门设计来返回数据。我将AssemblyTask方法的实现留给您。您需要在其中分配要从实体传递以通过dto对象查看的字段。通常,您会希望为每个DTO对象都拥有一个汇编器类,但是为了简单起见,我通过使用method引入了这个想法。