spring mvc 5.3.2 java.lang.nullpointerexception:无法调用,因为null

sshcrbum  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(448)

这个问题在这里已经有答案了

为什么我的spring@autowired字段为空(22个答案)
19天前关门了。
我知道我做错了什么,但我想不通,我需要你的帮助。我将简短地直截了当地说:
存储库

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@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)

有没有人比我更擅长使用springdatajpa方法查询从mysql数据库获取数据并将其输出到jsp文件中?

wpcxdonn

wpcxdonn1#

主要原因是您正在手动创建一个新的 TemplateController 在jsp中。spring不会帮助您自动注入它的依赖项(即。 TemplateRepository 在本例中)如果您手动创建bean。因此,它的依赖关系为null,当您访问它时,会发生npe。
你应该得到 TemplateController 当您希望使用bean而不是手动创建bean时,可以从spring上下文中删除。此外,将与jsp中的业务逻辑相关的java代码混合在一起,就像您现在所做的那样,被认为是业界最糟糕的做法之一。
相反,您应该计算要在其中显示的数据 TemplateController . 把数据放到 Model / ModelMap / ModelAndView 然后使用el表达式在jsp中访问它。像这样或这样的。

相关问题