Развертывание портлета JSF 2.0 на Websphere Portal 8

У меня проблема с запуском портлета JSF 2.0 в Websphere Portal 8. Если я не использую тег <f:ajax>, похоже, что приложение каким-то образом работает. Но когда я добавляю <f:ajax> портлет, он не отображается, и в SystemOut.log я вижу:

0000003c FaceletViewDe E   Error Rendering View[/views/Home.xhtml]
                                 java.lang.NullPointerException
    at com.ibm.faces20.portlet.util.WebXMLParser.endElement(WebXMLParser.java:115)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at com.ibm.faces20.portlet.util.WebXMLParser.<init>(WebXMLParser.java:51)
    at com.ibm.faces20.portlet.httpbridge.PortletResource.getRequestPath(PortletResource.java:106)
    at org.apache.myfaces.shared_impl.renderkit.html.util.ResourceUtils.renderDefaultJsfJsInlineIfNecessary(ResourceUtils.java:204)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:69)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:535)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:626)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:622)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:622)
...

Я настроил приложение для использования моста IBM Portlet, включенного в WebSphere Application Server 8. В faces-config.xml я добавил:

<view-handler>com.ibm.faces20.portlet.FaceletPortletViewHandler</view-handler>
<resource-handler>com.ibm.faces20.portlet.httpbridge.PortletResourceHandler</resource-handler>
<el-resolver>com.ibm.faces20.portlet.PortletELResolver</el-resolver>

В portlet.xml я использую такие классы IBM, как:

...
<portlet-class>com.ibm.faces20.portlet.FacesPortlet</portlet-class>
<init-param>
    <name>com.ibm.faces.portlet.page.view</name>
    <value>/views/Home.xhtml</value>
</init-param>
...

Выяснил, что при удалении <resource-handler>com.ibm.faces20.portlet.httpbridge.PortletResourceHandler</resource-handler> из faces-config.xml приложение работает даже с тегами. Однако отсутствует jsf.js, поэтому все вызовы AJAX JavaScript завершаются ошибкой. Таким образом, приложение действует как если нет.

Буду признателен за любую помощь или совет.

Я пытаюсь запустить портлеты JSF 2.0 на WebSphere Portal 8 в течение 5 дней, но почти безуспешно и с большим трудом. Это очень сложно с небольшой документацией, без исходников (мне нужно декомпилировать классы!). Дерьмовый проприетарный код с закрытым исходным кодом!


person Ondrej Bozek    schedule 07.09.2012    source источник


Ответы (1)


Хорошо, проблема была в объявлении Faces Servlet в web.xml. Имя Faces Servlet очень важно в WebSphere Portal 8. Оно должно быть точно

Сервлет Faces

с точным случаем. Нравится:

<servlet>
    <description>
        Servlet that does the job for serving JSF requests.
    </description>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <enabled>true</enabled>
    <async-supported>false</async-supported>
</servlet>

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

person Ondrej Bozek    schedule 16.10.2012