Два экземпляра управляемого компонента

Когда я обращаюсь к своей странице в первый раз, управляемый bean-компонент, используемый страницей, создается два раза (я прохожу два раза в конструкторе с одной и той же трассировкой стека):

Daemon Thread [http-127.0.0.1-8080-1] (Suspended (breakpoint at line 76 in MyController))   
    MyController.<init>() line: 76  
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 39    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27    
    Constructor<T>.newInstance(Object...) line: 513 
    Class<T>.newInstance0() line: 355   
    Class<T>.newInstance() line: 308    
    ManagedBeanBuilder(BeanBuilder).newBeanInstance() line: 186 
    ...
    pass throught two Filters (one of the filter uses Waffle and the other calls a web service...)  
    ...     
    Http11Protocol$Http11ConnectionHandler.process(Socket) line: 601    
    JIoEndpoint$Worker.run() line: 447  
    Thread.run() line: 662  

В xhtml:

<a4j:keepAlive beanName="myController"></a4j:keepAlive>
<h:form>
...
</h:form>

В файлеfaces-config.xml:

<managed-bean>
        <managed-bean-name>myController</managed-bean-name>
        <managed-bean-class>com.xx.MyController</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Почему управляемый компонент создается два раза?

Спасибо за ваши идеи...

С использованием

  • jsf 1.2
  • богатые лица 3.3.2.SR1

Редактировать: благодаря Джоэри Хендрикксу я узнал, что у меня есть два разных запроса. Итак, новый вопрос: «Почему у меня два запроса при доступе к моей странице?»


person Jean-Charles    schedule 22.08.2011    source источник
comment
Поскольку ваш bean-компонент находится в области запроса, этого не должно быть. Вы говорите, что у вас есть одна и та же трассировка стека дважды; проверьте, совпадает ли объект запроса.   -  person Joeri Hendrickx    schedule 22.08.2011
comment
Вы правы, на самом деле это не один и тот же запрос. Индикация: во время процесса я прохожу через два фильтра (один из фильтров использует Waffle, а другой вызывает веб-службу...).   -  person Jean-Charles    schedule 22.08.2011
comment
@Joeri: вы должны опубликовать это как ответ, что на самом деле это два физически разных запроса.   -  person BalusC    schedule 22.08.2011
comment
@BalusC Конечно, но сейчас я спрашиваю себя, почему у меня два запроса при доступе к моей странице? Вопрос только что изменился.   -  person Jean-Charles    schedule 22.08.2011
comment
Это не проблема JSF. Просто установите отладчик HTTP-трафика, например Fiddler2. Могу я предположить, что вы используете Eclipse с Tomcat или JBoss и что первый запрос был запущен прямо перед тем, как сервер завершил запуск?   -  person BalusC    schedule 22.08.2011


Ответы (1)


Если вы получаете два экземпляра bean-компонента с областью запроса, это должно означать, что у вас есть два запроса.

Проверьте, отправляет ли ваш браузер два запроса (используйте firebug или fiddler). Если он отправляет только один, это означает, что ваш запрос дублируется где-то в стеке (возможно, в фильтре или, может быть, даже в пользовательском сервлете).

person Joeri Hendrickx    schedule 22.08.2011
comment
Чтобы закончить эту историю, я не мог найти, почему есть два запроса. Может быть сделано jsf-процессами. Поскольку это не кажется тревожным, я оставляю эту проблему. Тем не менее, это первый раз, когда я вижу, что это поведение jsf. Спасибо - person Jean-Charles; 25.08.2011
comment
@Jean-Charles Если вы используете полный стек с открытым исходным кодом (и я предполагаю это), вы сможете полностью отследить запрос до его источника. Если это действительно два отдельных объекта запросов, поступающих с вашего сервера (tomcat?), то это должны быть два запроса, и вы должны, по крайней мере, увидеть это в Fiddler. Нет проблемы, которую нельзя было бы отладить, если у вас есть правильные инструменты :) - person Joeri Hendrickx; 26.08.2011
comment
Да, конечно, я согласен с этим;) но я спрашиваю себя, действительно ли это ошибка. Глобальное поведение кажется хорошим (например, Keep Alive работает нормально). Вы когда-нибудь видели такое поведение в своем приложении (два экземпляра)? - person Jean-Charles; 26.08.2011
comment
Нет; Я достаточно часто видел множественный доступ, но никогда несколько экземпляров. - person Joeri Hendrickx; 26.08.2011
comment
Даже если проблема все еще существует, я принимаю ваш ответ, потому что вы помогаете мне правильно смотреть... спасибо - person Jean-Charles; 31.08.2011
comment
Чтобы завершить эту проблему: причина, по которой было 2 запроса: <h:graphicImage value="#{component.iconImage}" /> иногда имеет значение "". В этом случае новый запрос GET искал изображение после первого запроса. Чтобы решить эту проблему, я добавил rendered="#{component.iconImage != null}". Спасибо - person Jean-Charles; 28.09.2011