2

我在 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 天,几乎没有成功,而且很痛苦。文档很少,没有源代码(我必须反编译类!),这非常困难。蹩脚的专有闭源!

4

1 回答 1

0

好的,问题出在 in 的声明Faces Servletweb.xml。的名称Faces Servlet在 WebSphere Portal 8 中非常重要。它必须是

人脸小服务程序

与确切的情况。像这样:

<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>

如果您不遵守此 servlet 名称,则会如上所述引发晦涩的异常。这种行为对我来说非常奇怪和难以理解。没有找到有关 Faces Servlet 规范名称的任何信息。我不确定是否有任何其他 Portal 服务器需要这样的东西。

于 2012-10-16T07:19:53.623 回答