У меня проблема с запуском портлета 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 дней, но почти безуспешно и с большим трудом. Это очень сложно с небольшой документацией, без исходников (мне нужно декомпилировать классы!). Дерьмовый проприетарный код с закрытым исходным кодом!