Thymeleaf, если выражение не работает со значением параметра темы - PullRequest
0 голосов
/ 22 января 2019

В моем приложении есть преобразователь тем.Есть две темы: темная и белая.

<p th:text="${param.theme}">

</p>

Возвращает текущую тему, темную или белую.Однако

<p th:if="${param.theme == 'white'}">
    white theme
</p>

ничего не выводит.

Я хочу, чтобы это реализовало переключение тем.Как заставить это работать?

Код конфигурации Java.

public class WebConfig  implements WebMvcConfigurer {

    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    public SpringResourceTemplateResolver templateResolver() {

        var templateResolver = new SpringResourceTemplateResolver();

        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("classpath:/templates/");
        templateResolver.setSuffix(".html");

        return templateResolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {

        var templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);

        return templateEngine;
    }

    @Bean
    public ViewResolver viewResolver() {

        var resolver = new ThymeleafViewResolver();
        var registry = new ViewResolverRegistry(null, applicationContext);

        resolver.setTemplateEngine(templateEngine());
        registry.viewResolver(resolver);

        return resolver;
    }

    @Bean
    public ThemeSource themeSource() {

        var themeSource = new ResourceBundleThemeSource();
        themeSource.setBasenamePrefix("themes/");
        return themeSource;
    }

    @Bean
    public ThemeResolver themeResolver(){

        var resolver = new CookieThemeResolver();
        resolver.setCookieMaxAge(604800);
        resolver.setCookieName("mytheme");
        resolver.setDefaultThemeName("dark");
        return resolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        var themeChangeInterceptor = new ThemeChangeInterceptor();
        themeChangeInterceptor.setParamName("theme");
        registry.addInterceptor(themeChangeInterceptor);
    }

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

Ответы [ 2 ]

0 голосов
/ 22 января 2019

попробуйте преобразовать параметр темы в строку (используя выражение thymleaf # {}), а затем сравните его с именем вашей темы

как показано ниже:

<p th:if="${#strings.toString(param.theme) == 'white'}">
    white theme
</p>
0 голосов
/ 22 января 2019

Попробуйте это.

     public class DataInterceptor extends HandlerInterceptorAdapter
      {
            @Override public void postHandle( HttpServletRequest request, 
           HttpServletResponse response, Object handler, ModelAndView 
             modelAndView ) throws Exception
           {
    if( modelAndView != null )
    {
        setup( modelAndView.getModel(), request );
    }
}

              private void setup( Map<String, Object> model, HttpServletRequest request )
                         {
                    String theme = RequestContextUtils.getTheme( request ).getName();
                         model.put( "theme", theme);

                             }
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...