如果Spring MVC中包含特定的百叶窗片段,如何从数据库加载数据

时间:2017-04-12 17:55:07

标签: java spring spring-mvc thymeleaf

我使用Spring和Thymeleaf。有一个用于侧边栏菜单的百万美元片段,包含在某些页面中。

我的问题:

有没有办法注册,如果主题中包含的段然后从数据库加载相关数据并将其添加到模型? (我在php Laravel 5中使用了类似的东西)

1 个答案:

答案 0 :(得分:0)

从数据库获取数据并将其添加到控制器方法的模型中。然后在前端,只检查该值是否为null。如果该值不为null,则显示此片段。例如:您在控制器中设置一个值,如下所示:

model.addAttribute("errors",this.DAOLayer.getItemsToShowOnAParticularFragment()); 

然后在前端:

<c:if test="${errors != null}"> 
<div class="alert>
<table class="table">                                   
<c:forEach items="${errors}" var="error">
<tr><td><c:out value="${error.defaultMessage}" /></td></tr>
</c:forEach>                                                        
</table>
</div>
</c:if>  

我在我的JSP上这样做。如果错误为空,则整个<div>不会显示。 <div>仅在错误不为空时显示。

您可以设置另一个if语句,如果错误为null,请改为显示。

<c:if test="${errors == null}">
<!-- Since nothing came from DB, show this info in this fragment -->

进一步说明:

假设您已预留了一部分前端,可以显示来自数据库的这些消息。我将使用bootstrap作为示例。假设带圆圈的<div>是您为其分配的区域。

enter image description here

产生这种布局的前端代码就是这个(它包含了导入Bootstrap库的所有import语句):

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="jumbotron text-center">
  <h1>My First Bootstrap Page</h1>
  <p>Resize this responsive page to see the effect!</p> 
</div>
  
<div class="container">
  <div class="row">
    <div class="col-sm-4">
      <h3>Column 1</h3>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p>
      <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris...</p>
    </div>
    <div class="col-sm-4">
      <h3>Column 2</h3>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p>
      <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris...</p>
    </div>
    <!-- Start of circled div  -->
    <div class="col-sm-4">
      <h3>Column 3</h3>        
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p>
      <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris...</p>
    </div>
    <!-- End of circled columns -->
  </div>
</div>

</body>
</html>

现在里面这个最后<div class="col-sm-4"> ....,您将放置<c:if test="${errors != null}"> JSTL代码来测试要向用户显示的内容。我希望您知道如何在前端使用和导入JSTL标记。如果没有,那么你可以google它,你会找到很多答案。 就是这样。