Spring MVC 5.3.2 java.lang.NullPointerException: 无法调用,因为 NULL

Spring MVC 5.3.2 java.lang.NullPointerException: Cannot invoke because NULL

我知道我在这里做错了什么,但我想不通,我需要你的帮助,谢谢。 我将简明扼要,开门见山:

存储库

enter code here
@Repository
public interface TemplateRepository extends CrudRepository<Template, Integer>{
     @Query("select t.temp_code From Template t where t.temp_area = ?1") 
      public String getTemplateCode(String temp_area);
    
}

服务 @Service("模板服务")

public class TemplateService {

     @Autowired
     TemplateRepository templateRepository;
     
     @Transactional
     public String getLeftMenuArea() {       
      return templateRepository.getTemplateCode("left_menu");
     }   
}

控制器

@Controller
public class TemplateController {
    @Autowired
    static TemplateService templateservice;

    
     public static String getLeftMenu() {
         return templateservice.getLeftMenuArea();
     }
}

JSP

....
    <%      
    TemplateController tc = new TemplateController();
        String test = tc.getLeftMenu();
    
        pageContext.setAttribute("test", test);
     %>                       

                            <div class="tinymce-single responsive-mg-b-30">
                                <div class="alert-title">
                                    <h2>Notice</h2>
                                </div>
                                <div id="summernote1">   <c:out value="${test}" escapeXml="false" />
                                </div>
                            </div>
....

当我 运行 应用程序时,我收到以下错误消息:

SEVERE: Servlet.service() for servlet [spring] in context with path [/eFatura-CE-Systems] threw exception [Beim Verarbeiten von [/WEB-INF/views/index.jsp] ist in Zeile [1078] eine Ausnahme erzeugt worden

1075:   
1076:   <%      
1077:   TemplateController tc = new TemplateController();
1078:       String test = tc.getLeftMenu();
1079:   
1080:         pageContext.setAttribute("test", test);
1081:      %>                       

Stacktrace:] with root cause
java.lang.NullPointerException: Cannot invoke "de.efatura.service.TemplateService.getLeftMenuArea()" because "de.efatura.controller.TemplateController.templateservice" is null
    at de.efatura.controller.TemplateController.getLeftMenu(TemplateController.java:16)

有没有人比我有更好的主意来使用 Spring 数据 JPA 方法查询从 MySQL 数据库中获取数据并将其输出到 JSP 文件中?

主要原因是您在JSP中手动创建了一个新的TemplateController。如果您手动创建一个 bean,Spring 将不会帮助您自动注入它的依赖项(即本例中的 TemplateRepository)。因此,它的依赖项为 NULL,当您访问它时会发生 NPE。

当您想要使用 bean 而不是手动创建它时,您应该从 spring 上下文中获取 TemplateController。此外,像您现在所做的那样,将与业务逻辑相关的 java 代码混合在 JSP 中,这被认为是业内最糟糕的做法之一。

相反,您应该计算要在 TemplateController 中显示的数据。将数据放到Model/ModelMap/ModelAndView中,然后在JSP中用EL表达式访问。类似于 this or this.