在Websphere Portal 8上部署JSF 2.0 portlet

时间:2012-09-07 10:07:16

标签: ajax jsf-2 portlet websphere-portal websphere-8

我在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类:<​​/ p>

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

我发现当我移除时 来自faces-config.xml应用程序的<resource-handler>com.ibm.faces20.portlet.httpbridge.PortletResourceHandler</resource-handler>甚至可以使用标签。但是缺少 jsf.js ,因此所有AJAX JavaScript调用都失败了。因此,如果没有,则应用程序就会起作用。

我会感激任何帮助或建议。

我正在努力让JSF 2.0 portlet在WebSphere Portal 8上运行5天,几乎没有成功和痛苦。很少有文档,没有来源(我必须反编译类!)。蹩脚的专有封闭源!

1 个答案:

答案 0 :(得分:0)

好的问题出在Faces Servlet中声明web.xmlFaces Servlet的名称在WebSphere Portal 8中非常重要。它必须完全

  

Faces Servlet

确切的情况。像这样:

<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服务器需要这样的东西。