繁体   English   中英

在多个页面上使用下拉菜单,我应该将它组件化吗?

[英]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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM