2013-07-09 6 views
6

Мы переносим проект JSF 1.1 (MyFaces) в JSF 2. Идея состоит в том, чтобы периодически переносить, сохраняя как JSP, так и XHTML в течение некоторого времени. Мы используем много тегов ajax4jsf-1.1.1 на страницах JSP. Мы не используем RichFaces. После настройки системы в JSF 2 (со всеми изменениями конфигурации, указанных в руководстве по Balusc) При попытке доступа к странице JSP с ajax4jsf.jar в пути к классам, мы получаем исключение:Перенос JSF 1.1 с Ajax4jsf 1.x на JSF 2

Caused by: java.lang.IllegalStateException: setViewHandler may not be executed after a lifecycle request has been completed 
    at org.apache.myfaces.application.ApplicationImpl.setViewHandler(ApplicationImpl.java:853) 
    at org.ajax4jsf.framework.ajax.InitPhaseListener.beforePhase(InitPhaseListener.java:92) 
    at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:76) 
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:131) 

Он выглядит ajax4jsf.jar является несовместим с JSF 2. Вызывает некоторые проблемы с конфигурацией LifeCycle.

Есть ли способ сделать работу a4j с JSF 2 JSP? Я знаю, когда мы используем XHTML, нам это не нужно.

+0

Вы пробовали использовать RichFaces 4 вместо Ajax4jsf? –

+0

Да, попробовали быстро. Но проблемы с навигацией и обработкой действий с JSP. Не заглядывал глубоко в это, так как мы планировали использовать в будущем перформансы и не хотим прибегать к Richfaces на данный момент. –

+0

Чтобы сообщить об этом, RichFaces впитал проект ajax4jsf. Я не понимаю, почему бы не приключиться * в RichFaces. –

ответ

13

Избавьтесь от Ajax4jsf 1.x вообще. Это действительно несовместимо с JSF2. Вместо этого JSF2 предлагает новый основной тег ajax <f:ajax>, который охватывает все основные функции, как ранее предлагалось Ajax4jsf 1.x.

Если обновление до RichFaces 4 не является вариантом (поскольку, как вы сказали сами, вы не используете компоненты RichFaces в любом месте), просто удалите Ajax4jsf 1.x и замените все теги <a4j:xxx> стандартными эквивалентами JSF2.

  • <a4j:ajaxListener>: использование <f:ajax listener>.
  • <a4j:keepAlive>: просто поместите управляемый bean-компонент в область видимости на @ViewScoped.
  • <a4j:log>: использовать jsf.ajax.addOnEvent() или jsf.ajax.addOnError() в контексте JS.
  • <a4j:commandLink>: только гнездо <f:ajax> внутри <h:commandLink>.
  • <a4j:outputPanel>: используйте <h:panelGroup> и не забудьте указать его ID в <f:ajax render> или PrimeFaces <p:outputPanel>.
  • <a4j:repeat>: просто используйте стандарт <ui:repeat>.
  • <a4j:form>: просто используйте <h:form>, он автоматически определит <f:ajax>.
  • <a4j:htmlCommandLink>: только гнездо <f:ajax> внутри <h:commandLink>.
  • <a4j:jsFunction>: без замены. Рассмотрим OmniFaces <o:commandScript> или PrimeFaces <p:remoteCommand>.
  • <a4j:region>: просто используйте <f:ajax execute>, вы можете даже обернуть <f:ajax> вокруг группы компонентов.
  • <a4j:loadBundle>: просто используйте стандарт <f:loadBundle>.
  • <a4j:status>: использование jsf.ajax.addOnEvent() или jsf.ajax.addOnError() в контексте JS.
  • <a4j:actionparam>: просто используйте стандарт <f:param>.
  • <a4j:loadScript>: просто используйте стандарт <h:outputScript>.
  • <a4j:mediaOutput>: без замены. Рассмотрим PrimeFaces <p:media>.
  • <a4j:poll>: без замены. Рассмотрим OmniFaces <o:commandScript> или PrimeFaces <p:poll>.
  • <a4j:commandButton>: только гнездо <f:ajax> внутри <h:commandButton>.
  • <a4j:include>: просто используйте стандарт <ui:include>.
  • <a4j:loadStyle>: просто используйте стандарт <h:outputStylesheet>.
  • <a4j:support>: просто используйте стандарт <f:ajax>.

Вам также необходимо переименовать/переписать JSP-файлы в файлы Facelets. В простых случаях это обычно связано с изменением корневых деклараций и расширений файлов. Facelets упрощает замену всего дублированного кода на один шаблон. Следующий ответ относится:

+0

Но если я правильно понял, то теги не будут работать в JSP? Есть ли какое-либо решение, которое работает в JSP (вместо повторного внедрения JSP в XHTML)? –

+0

JSP устарел в JSF2. Поэтому действительно ожидается, что вы перейдете на Facelets. Это может быть полезно тогда: http://stackoverflow.com/questions/4441713/migrating-from-jsf-1-2-to-jsf-2-0/4532870#4532870 – BalusC

+0

искал способ, которым мы можем сохранить существующие JSP с тегами a4j, поскольку это происходит некоторое время, пока мы переходим на XHTML. Кажется, нет никакого способа. Не уверен, что обновление RichFaces возможно только для поддержки тегов a4j на страницах JSP. –

 Смежные вопросы

  • Нет связанных вопросов^_^