java - Thymeleaf 如果表达式不适用于主题参数值
问题描述
我的应用程序中有一个主题解析器。有两个主题:黑色和白色。
<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/");
}
解决方案
尝试这个。
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);
}
}
推荐阅读
- python - 模块“aioredis”没有属性“create_redis”
- java - 有没有办法让一个不在超类中的方法可以访问超类的实例变量?
- c++ - 将 IP 地址从字符串转换为 IPAddress (Arduino)
- android - Google Civics API:来自此客户端应用程序的请求
被封锁 - objective-c - 如何将数据从 tableview 控制器传递到 Objective-C 中的另一个视图控制器?
- html - 自定义输入类型=“文件”
- python - 用第二个数据帧中的标签替换数据帧值
- sql - 如何在 PostgreSQL 中将日期四舍五入到当月的最后一天?
- google-cloud-functions - Cloud Run 容器工作了一段时间,然后因授权错误而失败
- javascript - Tensorflowjs:“未知层:标准化”