问题描述
我的问题是我的页面上有一个jquery数据表,该数据表属于使用springboot 2.3.2.RELEASE以及Java 11和thymleaf的Web应用程序。
为了具有与以下相同的行为:Jquery datatables Row details
我的png文件如下:
并在我的Configuration类中:
#include <signal.h>
#include <stdio.h>
volatile sig_atomic_t signaled = 0;
void signal_handler(int) { signaled = 1; }
int main() {
signal(SIGINT,signal_handler);
while (!signaled) {}
printf("Signaled!\n");
}
在开发人员控制台中,链接http:// localhost:8080 / tsp / details_open.png中有404
我徒劳无功。除非我没有记错,否则它与静态资源处理有关。
tsp来自以下application.yml文件:
@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurationSupport {
@Bean
static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Override
public RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
RequestMappingHandlerMapping requestMappingHandlerMapping = super.createRequestMappingHandlerMapping();
requestMappingHandlerMapping.setUseTrailingSlashMatch(false);
return requestMappingHandlerMapping;
}
@Bean(name = "messageSource")
public MessageSource configureMessageSource() {
// default message source
ReloadableResourceBundleMessageSource defaultMessageSource = new ReloadableResourceBundleMessageSource();
defaultMessageSource.setBasename("classpath:i18n/messages");
defaultMessageSource.setdefaultencoding("UTF-8");
defaultMessageSource.setCacheSeconds(5000);
return defaultMessageSource;
}
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultLocale(new Locale("fr"));
resolver.setCookieName("localeCookie");
resolver.setCookieMaxAge(5000);
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
registry.addInterceptor(interceptor);
}
@Bean
public ClassLoaderTemplateResolver templateResolver() {
ClassLoaderTemplateResolver result = new ClassLoaderTemplateResolver();
result.setPrefix("/templates/");
result.setSuffix(".html");
result.setTemplateMode("HTML");
result.setorder(1);
result.setCacheable(true);
return result;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
// templateEngine.addDialect(new SpringSecurityDialect());
templateEngine.addDialect(new nz.net.ultraq.thymeleaf.LayoutDialect());
return templateEngine;
}
@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
thymeleafViewResolver.setCharacterEncoding("UTF-8");
return thymeleafViewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
}
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
}
请帮忙吗?
解决方法
我通过如下更新MvcConfig类来解决我的问题:
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
...
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(
"/img/**","/webfonts/**","/css/**","/js/**")
.addResourceLocations(
"classpath:/static/img/","classpath:/static/webfonts/","classpath:/static/css/","classpath:/static/js/");
}
@Bean
public ClassLoaderTemplateResolver templateResolver() {
ClassLoaderTemplateResolver result = new ClassLoaderTemplateResolver();
result.setPrefix("/templates/");
result.setSuffix(".html");
result.setTemplateMode(TemplateMode.HTML);
result.setOrder(1);
result.setCacheable(false);
return result;
}
...
}
这意味着我将WebMvcConfigurationSupport
更改为WebMvcConfigurer
,并删除了无用的自定义代码。
奇怪的是,根据spring文档,应该自动加载静态文件夹...但是不是...这就是为什么我添加了resouce处理程序。
为了优化性能,我在本地复制了所有js / css / map文件。