Spring 如何在JSP中获取动态下拉框

Spring 如何在JSP中获取动态下拉框,spring,jsp,spring-mvc,Spring,Jsp,Spring Mvc,我想在SpringMVC中填充一个下拉框,我尝试过这样做,但得到了空指针异常 这是我的控制器: public class CatalogueController { private CatalogueService catalogueService; private PublisherService publisherService; private SubjectService subjectService; // some code and i generated setter

我想在SpringMVC中填充一个下拉框,我尝试过这样做,但得到了空指针异常

这是我的控制器:

public class CatalogueController  {
private CatalogueService catalogueService;
private PublisherService publisherService;
private SubjectService subjectService; 

   // some code and i generated setter and getter methods  
   ............

 @RequestMapping(value="/catalogue/new.action", method=RequestMethod.GET)  
   public ModelAndView newMember() throws Exception {
    ModelAndView mvc= null;
    mvc =   new ModelAndView("catalogue/catalogueForm", "catalogueForm", new CatalogueBase());
    mvc.addObject("copyDetailForm", new CatalogueCopyDetails());

    List<Publisher> publist = publisherService.getPublisherList();
    mvc.addObject("publist", publist);

    List<Subject> subjectlist = subjectService.getSubjectList();
    mvc.addObject("subjectlist", subjectlist);

    return mvc;
}  
公共类目录控制器{
私人目录服务目录服务;
私有发布服务发布服务;
私人主体服务主体服务;
//一些代码和我生成的setter和getter方法
............
@RequestMapping(value=“/catalog/new.action”,method=RequestMethod.GET)
public ModelAndView newMember()引发异常{
ModelAndView mvc=null;
mvc=新模型和视图(“目录/目录表单”、“目录表单”、新目录库());
addObject(“copyDetailForm”,newCatalogeCopyDetails());
List publist=publisherService.getPublisherList();
mvc.addObject(“publist”,publist);
List subjectlist=subjectService.getSubjectList();
添加对象(“主题列表”,主题列表);
返回mvc;
}  
这是我的服务方式:

    @Override
public List<Publisher> getPublisherList() {
    List<Publisher> list = publisherDAO.getPublisher();
    return list;
}
    @Override
public List<Subject> getSubjectList() {
    List<Subject> list = subjectDAO.getSubjects();
    return list;
}
@覆盖
公共列表getPublisherList(){
List List=publisherDAO.getPublisher();
退货清单;
}
@凌驾
公共列表getSubjectList(){
List List=subjectDAO.getSubjects();
退货清单;
}
这是我的刀法:

    @SuppressWarnings("unchecked")
public List<Publisher> getPublisher() {
      Query qry = getSession().createQuery("from Publisher");
        return qry.list();
}
    @SuppressWarnings("unchecked")
public List<Subject> getSubjects() {
      Query qry = getSession().createQuery("from Subject");
        return qry.list();
}
@SuppressWarnings(“未选中”)
公共列表getPublisher(){
Query qry=getSession().createQuery(“来自发布服务器”);
返回qry.list();
}
@抑制警告(“未选中”)
公共列表getSubjects(){
Query qry=getSession().createQuery(“来自主题”);
返回qry.list();
}
最后,这是我的JSP页面:

  <form:form commandname="catalogueForm"    action="${pageContext.request.contextPath}/catalogue/create.action" method="post" modelAttribute="catalogueForm">

    <form:select path="publisher.id" id="publisher.id">
    <form:options items="${publist}" itemValue="id" itemLabel="name" />
    </form:select>                                                        

    <form:select path="subject.id" id="subject.id">                            
    <form:options items="${subjectlist}" itemValue="id" itemLabel="name" />
    </form:select>

   </form:form>

这是堆栈跟踪:

java.lang.NullPointerException 在com.easylib.elibrary.webapp.controller.catalog.catalogecontroller.newMember上(catalogecontroller.java:80) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:601) 位于org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 位于org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 位于org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100) 位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604) 位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565) 位于org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)

您将在控制器的第80行获得npe,但我看不出您所问的是哪一行


我的猜测是,您没有正确地连接服务,“publisherService”或“subjectService”为空。

第80行是:List subjectlist=subjectService.getSubjectList();在这种情况下,唯一的选项是subjectService尚未初始化,并且您正在对空对象调用方法。private subjectService subjectService不应该是@Autowired private subjectService subjectService,然后调用subjectService.getSubjectList()