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