Управляемый с помощью Spring конструктор компонентов с ограниченной областью запроса, вызываемый дважды при нажатии командной кнопки JSF

#java #spring #jsf

#java #весна #jsf

Вопрос:

Я использую интеграцию JSF-Spring, я вызываю управляемый Spring метод запроса с областью действия из JSP с использованием JSF <h:commandButton> . Одна вещь, которую я не могу понять, это то, что конструктор Spring bean вызывается дважды. Почему это происходит?

Вот весенний управляемый боб:

 @org.springframework.stereotype.Component
@org.springframework.context.annotation.Scope("request")
public class MyAction implements java.io.Serializable {

    public MyAction(){
        System.out.println("inside request scoped bean");
    }
 

Вот представление JSF:

 <h:commandButton value="add" action="#{MyAction.add}" />
 

Комментарии:

1. У вас нет компонента с областью действия запроса JSF. У вас есть компонент с областью действия запроса Spring. Будьте осторожны с терминологией. Я отредактировал ваш вопрос, чтобы уточнить одно и другое. Компонент с областью действия запроса JSF будет иметь аннотации @ManagedBean @RequestScoped из javax.faces.bean пакета.

Ответ №1:

Можете ли вы выполнить отладку, чтобы отследить, откуда вызывается конструктор? Довольно уверен, что один из вызовов заключается в том, что его пытаются инициализировать из какого-либо другого места, а другой — из приложения / пользовательского интерфейса

Ответ №2:

Я получил ответ, конструктор вызывался дважды из-за прокси-механизма cglib Spring.

Комментарии:

1. Тарун, ты можешь подробнее рассказать об этом?

2. «Конструктор вашего прокси-объекта будет вызван дважды» — static.springsource.org/spring/docs/3.0.0.M3/reference/html /…