我在 Websphere Portal 8 中运行 JSF 2.0 Portlet 时遇到问题。如果我不使用<f:ajax>
标记,它看起来应用程序以某种方式工作。但是当我添加<f:ajax>
portlet 时没有呈现并且在 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)
...
我已将应用程序配置为使用 WebSphere Application Server 8 中包含的 IBM Portlet 桥接器。在 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 portlet 在 WebSphere Portal 8 上运行 5 天,几乎没有成功,而且很痛苦。文档很少,没有源代码(我必须反编译类!),这非常困难。蹩脚的专有闭源!