2017-03-08 123 views
0

我正在开发一个使用Thymeleaf作为视图技术的Spring启动应用程序。我在src/main/resources/templates文件夹中有一个html页面dashboard.html,它是从控制器内部调用的。Thymeleaf - 如何从静态html页面调用模板html页

enter image description here

@PostMapping("https://stackoverflow.com/users/register") 
public String registerUser(@Validated @ModelAttribute User user, Model model) { 
    User registeredUser = usersDAO.registerUser(user); 

    if (registeredUser == null) { 
     return "500error"; 
    } 

    model.addAttribute("name", user.getName()); 
    model.addAttribute("username", user.getUsername()); 
    model.addAttribute("emailId", user.getEmailId()); 

    return "dashboard"; 
} 

static文件夹内的一些静态HTML文件。我想从静态html文件中调用dashboard.html,比如使用锚定标记<a/>。如何才能做到这一点?

当我的应用程序在本地运行时,我无法直接链接到此文件。例如:localhost:8080/templates/dashboard.html将不起作用。

+0

这里不是真的你的问题,但重要的是:在用户为'null'的情况下,你不应该只显示一个正确的错误页面,而是确保使用正确的HTTP代码。使用当前的代码,您仍然会返回200 OK。最简单的方法是抛出一个用'@ ResponseStatus'注释的异常。 –

+0

src/main/resources不是存储html页面的好地方 –

+0

@Gurkanİlleez如果您在Thymeleaf启动器中使用Spring Boot,src/main/resources/templates是默认位置。我同意在'static'子目录中有一些html页面是很奇怪的。大多数情况下,这用于CSS,JS和/或图像文件。 –

回答

2

您应该为您的thymeleaf html模板创建一个控制器。例如:

@Controller 
@RequestMapping("/templates") 
public class DashboardController { 

    @GetMapping("/dashboard") 
    public ModelAndView dashboard() { 
     DashboardModel dashboardModel = new DashboardModel(); 
     return new ModelAndView("dashboard", "dashboard", dashboardModel); 
    } 

} 

然后你就可以链接到http://localhost:8080/templates/dashboard,让你的dashboard.html页。

当然,您可以根据需要更改@RequestMapping("/templates")@GetMapping("/dashboard")以控制网址。

+0

请注意,你不需要在控制器的@ RequestMapping中使用'/ templates',这可以是你喜欢的任何东西,它仍然可以工作。 –

+0

@WimDeblauwe,当然:)我使用'/ templates/dashboard',因为他提到的url模式是一个例子。和你一起编辑我的回答。 – Tom