2

Websphere Portal8でJSF2.0ポートレットを実行する際に問題が発生しました。<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)
...

WebSphere Application Server8に含まれているIBMポートレット・ブリッジを使用するようにアプリケーションを構成しました。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が欠落しているため、すべてのAJAXJavaScript呼び出しが失敗します。したがって、アプリケーションは存在しない場合のように動作します。

助けやアドバイスをいただければ幸いです。

JSF2.0ポートレットをWebSpherePortal8で5日間実行しようとしていますが、ほとんど成功せず、多くの苦痛があります。ドキュメントが少なく、ソースがない場合は非常に困難です(クラスを逆コンパイルする必要があります!)。Crappy独自のクローズドソース!

4

1 に答える 1

0

問題はinの宣言にありFaces Servletましたweb.xml。WebSphere Portal 8では、の名前Faces Servletが非常に重要です。正確に名前を付ける必要があります。

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サーブレットの正規名については何も見つかりませんでした。他のポータルサーバーがこのようなものを必要とするかどうかはわかりません。

于 2012-10-16T07:19:53.623 に答える