我知道我在这里做错了,但我无法弄清楚,我需要你的帮助。 我会简短地切入正题:
存储库
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("templateservice")
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 Data JPA 方法查询从 MySQL 数据库中获取数据并将其输出到 JSP 文件中?
答案 0 :(得分:0)
主要原因是您在 JSP 中手动创建了一个新的 TemplateController
。如果您手动创建 bean,Spring 不会帮助您自动注入其依赖项(即 TemplateRepository
在这种情况下)。因此,它的依赖项为 NULL,访问时会发生 NPE。
当您想使用 bean 而不是手动创建它时,您应该从 spring 上下文中获取 TemplateController
。此外,像您现在所做的那样在 JSP 中混合与业务逻辑相关的 Java 代码被认为是业内最糟糕的做法之一。
相反,您应该计算要在 TemplateController
中显示的数据。将数据放入Model
/ModelMap
/ModelAndView
,然后在JSP中使用EL表达式访问。类似于 this 或 this。