Исключение java.lang.NullPointerException при попытке достичь уровня сервиса с моего контроллера

Я работаю с Spring STS (также с Eclipse-juno, весной 3.1) и создаю проект весеннего шаблона.

Моя приветственная страница приложения представляет собой простую форму:

  <div id="editPresPage">
     <form action="editPresPage.do" method="post"> 
    <input type="text" name="page_text"/>
<input type="submit" value="Add New Page"/> </form> </div>

Когда я доставляю форму, мой контроллер встает на свои места:

@Controller
@RequestMapping(value = "/")
public class HomeController {

    private Page_manager_service page_manager_service;

    public void setPage_manager_service(Page_manager_service page_manager_service) {
        this.page_manager_service = page_manager_service;
    }

    @RequestMapping(value="/editPresPage",method = RequestMethod.POST)
    public ModelAndView EditPresPage()    {
        page_manager_service.check();

        return new ModelAndView("thanks");      
    }

Контроллер должен выполнить метод проверки (который отмечен) из интерфейса «Мой сервисный уровень»:

public interface Page_manager_service {
    public void check();
}

Реализация Service Layer:

public class Page_manager_service_mock_Impl implements Page_manager_service {

    public void check() {
        System.out.println("check method was done!!!");
    }
}

Но при выполнении метода проверки я получаю следующую ошибку:

java.lang.NullPointerException at my.topLevel.pack.HomeController.EditPresPage(HomeController.java:64)

Вот мой servlet-context.xml:

<?xml version="1.0" encoding="UTF-8"?>


    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    
        
        
    

    


Вот мой root-context.xml (вы можете видеть, что я подключил компонент «page_manager_service»):

<?xml version="1.0" encoding="UTF-8"?>
    

    <!-- Root Context: defines shared resources visible to all other web components -->
     

    <!--  Service Beans -->    
    
     
 

Я ничего не изменил в файле web.xml.

Я вижу, что реализация уровня сервиса вводится, потому что на нем есть «s».

Я могу перенести параметры из представления в контроллер, поэтому проблемы там нет.

It's in the controller<-> service layer communication.

Я не знаю, почему я получаю эту ошибку.

Проблема была решена с помощью следующих шагов:

Первый шаг: добавление @Autowired в поле page_manager_service (нормально удалить сеттер).

Второй шаг: в файле root-context.xml изменяется:


чтобы:


 

Третий шаг: Удаление:


от root-context.xml.

Четвертый шаг: добавление @Component к странице_manager_service_mock_Impl

1
nl ja de
Сервисный компонент Ur не был введен и недоступен, когда элемент управления приходит к этой точке. Hence NullPointerException. Я не вижу, где вы сопоставили Service Bean с контроллером Bean.
добавлено автор mavrav, источник

1 ответы

Хотя вы создали компонент Page_manager_service , он не был введен в класс Controller , вызывая NPE , когда вы вызываете

page_manager_service.check();

Вы можете аннотировать Page_manager_service с помощью @Component и autowire Controller :

@Autowired
private Page_manager_service page_manager_service;

Тогда сеттер будет ненужным ...

Сторона Примечание. Java использует верблюд-футляр, который сделает page_manager_service pageManagerService .

1
добавлено
Спасибо Reimeus! Я добавил решение в нижней части вопроса.
добавлено автор Rotemya, источник
Компонент создается, но никогда не устанавливается/не вводится в Controller . При использовании аннотированного Spring MVC autowiring используется более чистый, поскольку Spring создает контроллеры ...
добавлено автор Reimeus, источник
Вы бы почти never сделали это. Фактически сервисный компонент должен быть аннотирован как @Service (или @Component ) и пусть Spring подключается к нему.
добавлено автор Reimeus, источник
Перед аннотациями мы использовали инжекцию бобов методом сеттера. Существует соответствующий метод сеттера, почему он не вводится?
добавлено автор Ramesh Kotha, источник
он должен иметь контроллер bean в xml, и он должен иметь свойство ref с сервисом am i right?
добавлено автор Ramesh Kotha, источник
Да, спасибо Reimeus ...!
добавлено автор Ramesh Kotha, источник
Spring Framework and more
Spring Framework and more
839 участник(ов)

чат о spring framework и связанных с ним технологиях. We're discussing: job, tech questions, beer meet up/networking: tech review ,LinkedIn skills, SOF q/a raise up& etc. languages: russian,java,eng.

IDE и редакторы — русскоговорящее сообщество
IDE и редакторы — русскоговорящее сообщество
393 участник(ов)

Общаемся, сравниваем и помогаем друг другу решать задачи с продуктами JetBrains, VS Code, Atom, vim, Emacs, Sublime и т.д. Всё в одном месте, ведь каждый из них хорош по своему. См. также: @js_ru, @typescript_ru, @react_js, @nodejs_ru, @javascript_jobs