[英]Dropdown used on multiple pages, should I componentize it?
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我得到了将在某些页面上使用的下拉列表,我担心是否应该将其组件化并将其包含在每个页面上,或者我是否在需要的每个服务上调用下拉列表服务。 我用 thymeleaf 构建了一个 spring mvc
如果您有一个下拉列表或任何其他 html 元素,需要出现在多个页面上,那么将该元素放在 thymeleaf 片段中以避免代码重复是有意义的。 您不仅可以避免代码重复,而且您的代码也将变得更易于维护(因为需要维护的代码更少)。
<div th:fragment="dropdownFragment">
....
<select>
<th:block th:each="item : ${dropdownItems}">
<option th:value="${item}" th:text="${item}"></option>
</th:block>
</select>
</div>
为了减少访问数据库的次数,我们应该缓存我们的数据。 可能最简单的方法是使用内置的 HttpSession object(尤其是当我们的数据相对较小时)。代码可能类似于
HttpSession session = request.getSession();
//code to retrive data from the db
session.setAttribute("dropdownItems", dropdownItems);
session object 可以在 thymeleaf 中引用为#{session.some_object}
但自 Thymeleaf 3.1 以来已弃用。 因此,最好将 session 属性复制到 Model(或 ModelAndView)object,然后可以将其引用为${modelObject}
。
@GetMapping("/getItems")
public ModelAndView getDropdownItems(HttpSession session )
ModelAndView mv = new ModelAndView();
mv.setViewName("someView");
//this assumes that you already have a session with dropdownItemsattribute
mv.addObject("dropdownItems", session.getAttribute("dropddownItems"));
return mv;
}
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.