thymeleaf基于剩余的URI加载静态资源



我正在使用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。这可能工作,也可能不工作,这取决于您特定的资源解析器配置。

最新更新