Переменная-преобразователь типа API устарела после JSF 1.1. Вместо этого используйте el-resolver
Недавно мы обновили WebSphere Portal v6.1 до v7.0, и теперь у нас есть JSF 1.2. При создании нового проекта портлета в Rad 8 создается файл face-config.xml со следующей записью
<application>
<state-manager>com.ibm.faces.application.DevelopmentStateManager</state-manager>
<variable-resolver>com.ibm.faces.portlet.PortletVariableResolver</variable-resolver>
</application>
А потом жалуется: Type-переменная-решатель API устарела после JSF 1.1. Вместо этого используйте el-resolver.
К сожалению, я не смог найти ответ на страницах IBM, какой el-resolver использовать.
Редактировать:
System.out.println("Resolver: " + PortalUtil.getFacesContext().getApplication().getELResolver());
=> Resolver: com.sun.faces.el.FacesCompositeELResolver@696e696e
Добавление записи в face-config
<el-resolver>com.sun.faces.el.FacesCompositeELResolver</el-resolver>
С удалением переменной-преобразователя или без него приводит к:
java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:270)
at javax.faces.webapp.FacesServlet.init(FacesServlet.java:164)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:358)
... 89 more
ПМР с IBM открыли...
2 ответа
Ответ IBM на PMR:
В - Каковы могут быть последствия игнорирования предупреждения?
Ответ - Пользователь все еще может использовать переменный преобразователь, функциональность не будет затронута. [Этот тег будет сохранен для обратной совместимости]
Вопрос - Почему в сгенерированном Faces-config.xml все еще используется устаревший метод?
Ответ: Мы используем переменный resolver для разрешения переменных портлета, что будет хорошо работать даже с JSF 1.2
В - Будет ли или есть el-resolver для портлетов?
Ответ - Для портлетов будет el-resolver. Он будет предоставлен в виде моста 2.0 портлетов JSF, который будет поставляться как обновление для WAS. В настоящее время он находится на стадии планирования, поэтому я не могу дать вам точную версию, в которой это будет найдено.
Ненавижу это говорить, но если мы говорим об асинхронном веб-приложении, то вы мертвы в воде.
JSF 1.2 представил "известную ошибку" (мне всегда нравилась эта фраза) FaceletsRenderer
класс, который предотвращает асинхронную визуализацию компонентов JSF (потому что вся асинхронность в JSF использует фиктивный FacesContext
; не функциональный, который можно использовать для рендеринга). Для этого вам необходим JSF 2.1, совместимый с JEE6, в противном случае вам понадобится совсем другое решение, так как @D1e
указал в своем комментарии. Удачи вашей организации.