我正在使用thymeleaf作为我的春季启动项目的模板引擎。
我的目录结构是:
src/main/
|- java
| - UserAdministrationController.java
|- resources
| - static
| - admin
| - css
| - template.css
| - js
| - template.js
| - templates
|- incs
|- inc_form_create_user.html
|- users.html
我的控制器被注释为:
@Controller
@RequestMapping("/administration/users")
我有一个获取用户页面的方法:
@RequestMapping("")
public ModelAndView getUsersPage() {
return new ModelAndView("admin/users");
}
创建用户的方法:
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String handleUserCreateForm(@Valid @ModelAttribute("form") UserDTO form, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return getUsersPage().getViewName();
}
try {
userService.create(form);
} catch (DataIntegrityViolationException e) {
bindingResult.reject("email.exists", "Email already exists");
return getUsersPage().getViewName();
}
return "redirect:/administration/users";
}
和一个方法,当它被调用时,它在模型中添加一个用户(填写表单):
@RequestMapping("/{id}/edit")
public ModelAndView getEditPage(@PathVariable("id") long id) {
ModelAndView model = new ModelAndView("admin/users");
model.addObject("userToEdit", userService.getUserById(id));
return model;
}
我使用相同的页面,使用include来处理:
<div th:if="${userToEdit == null}" class="panel panel-default" th:include="admin/incs/inc_form_create_user :: createUserForm" ></div>
<div th:if="${userToEdit != null}" class="panel panel-default" th:include="admin/incs/inc_form_create_user :: editUserForm" ></div>
我的CSS文件已导入:
<link th:href="@{../../admin/css/template.css}" rel="stylesheet" />
当我进入user.html时,它也能工作。问题是,当我去调用具有不同URI的编辑方法时。
当我调用create时url是这样的:
http://localhost:8080/administration/users
调用edit:
http://localhost:8080/administration/users/10/edit
:
../../admin/css/template.css
但是在编辑情况下,浏览控制台显示了这个:
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/administration/admin/css/template.css
您可以使用绝对路径而不是相对路径,例如/admin/css/template.css
而不是../../admin/css/template.css
。这可能工作,也可能不工作,这取决于您特定的资源解析器配置。