java - 为什么我的 thymeleaf 标签是:text don't work

标签 java spring thymeleaf

在 admin.html 中,我有标签 th:text="${name}"。它不显示来自 Controller 的值。为什么?

Admin.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Admin page</title>
    </head>
    <body>
        Dear <strong><p th:text="${name}"></p></strong>, Welcome to Admin Page.
        <a href="/logout">Logout</a>
    </body>
</html>

Controller

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("userForm") User userForm, Model model) {

    try {            
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        model.addAttribute("name",authentication.getName());

        if (securityService.isAdmin(userForm.getUsername())) {
            return "redirect:/admin";
        }
    } catch (RestException e) {
        model.addAttribute("error", "User with username '"+userForm.getUsername()+"' not found");
    }

    return "redirect:/index";
}

我的MVC配置

@Configuration
@EnableWebMvc
@ComponentScan({ "ru.dev.avtonomki" })
public class WebMVCConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Bean
    public ViewResolver htmlViewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine(jspTemplateResolver()));
        resolver.setContentType("text/html");
        resolver.setCharacterEncoding("UTF-8");
        resolver.setOrder(1);
        resolver.setViewNames(ArrayUtil.array("*.html"));
        return resolver;
    }

      private TemplateEngine templateEngine(ITemplateResolver templateResolver) {
            SpringTemplateEngine engine = new SpringTemplateEngine();
            engine.addDialect(new LayoutDialect(new GroupingStrategy()));
            engine.addDialect(new Java8TimeDialect());
            engine.setTemplateResolver(templateResolver);
            return engine;
      }

    private ITemplateResolver htmlTemplateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/WEB-INF/templates/");
        resolver.setCacheable(false);
        resolver.setTemplateMode(TemplateMode.HTML5);
        return resolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

最佳答案

因为在您的“/admin”操作中,您必须传递名称而不是登录名。

    @RequestMapping(value = "/admin", method = RequestMethod.GET)
    public String admin(Model model) {
    Authentication authentication =SecurityContextHolder.getContext().getAuthentication();

    model.addAttribute("name",authentication.getName());

    retrun "admin" ;

    }

或者你可以设置RedirectAttributes

关于java - 为什么我的 thymeleaf 标签是:text don't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48517572/

相关文章:

java - 使用 Spring 4.1 在项目中注入(inject)依赖项

java - 使用 FlyingSaucer 从 HTML 模板生成 PDF 证书时,我的背景周围有白色边框

Spring 启动+ thymeleaf : get logged in user

spring-boot+thymeleaf crud :edit a row

java - 如何在 Android 应用程序中显示韩语单词

java - 为什么调试程序和运行程序的输出顺序不同?

Java 2D 数组维度

java - 我应该使用什么作为集合的内存屏障?

java - Swagger-ui 与 Spring 安全性

java - 如何在 Spring applicationContext 中读取系统环境变量