3

現在、カスタムウィジェットで使用するために基本的なJSF(2.0)サポートをBackbasePortal5.2.1.2に追加しようとしています。

静的な方法(「... / portal / static / portal_name / widgets / widget_name / index.xhtml」など)でウィジェットにアクセスすると機能しているように見えますが、ポータルのコンテキストでウィジェットを表示すると( ... / portal / portals / portal_name / pages / index)私のJSFタグは、解析された出力の代わりにHTMLソースに表示されます。同じことが#{msg.title}のようなEL変数にも起こります。

「通常の」Webアプリケーションプロジェクトで同じJSFセットアップを使用する場合、それも問題なく機能するため、私の目には、この問題を引き起こしているBackbase固有の何かがあるはずです。

これが発生する原因、解決または回避できるかどうか、または誰かがこの特定のバージョンのBackbaseにJSFを実装することに成功したかどうかを知りたいです。JSFの実装がBackbase5.1で機能したことは知っていますが、私にとっては、そのバージョンに戻すことはできません。

編集-リクエストに応じてウィジェットのindex.xhtmlを追加しました(私の実際のindex.xhtmlは少し大きいですが、これも失敗します):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xml:lang="en">
<h:head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>Help ribbon widget</title>
    <link rel="stylesheet" type="text/css" href="css/style.css" />
</h:head>
<h:body>
    <span class="left title">#{msg.help_title}</span>
    <h:outputText value="TEST"/>
</h:body>
</html>

さらに、助けになる場合は、コンテナテンプレートにBorder_Layoutを使用しています。

Google Chromeインスペクターの[ネットワーク]タブに移動し、ウィジェットのindex.xhtmlファイルのリクエストを見ると、正しい出力が表示されますが、何らかの理由で、これは結合されたhtmlに表示されるものと同じではありません。

4

1 に答える 1

4

このアプローチの問題は、ウィジェット定義に動的コンテンツが含まれるとは現在予想されていないことです。

あなたのシナリオでは、* Border_Layout *コンテナーはサーバーサイダーレンダリング(SSR)ウィジェットであると思います。これが発生した場合、ウィジェットのsrc URLが相対的である場合、ポータルはディスクからファイルを読み取るだけで、facesサーブレットが呼び出されることはありません。これは正常であり、定義は静的であると予想されます。しかし、2つの当面の解決策があります。

まず、クライアント側のレンダリング(CSR)に切り替えることができます。これにより、クライアントはウィジェット定義のhttpリクエストを作成し、facesサーブレットを介してアクセスされます。<b:include>これを実現する最も簡単な方法は、タグを含まないカスタムページテンプレートを使用することです。ただし、このソリューションは、JSを無効にすると機能しないことを意味します。

ただし、SSRを引き続き使用する場合は、ウィジェットのsrcプロパティに絶対URLを使用できます。これは、サーバーがウィジェットに対してhttpリクエストを行う必要があることを意味します。したがって、ウィジェットはfacesサーブレットを介して実行されます。ここにもう1つ問題があります。ポータルサーバーはウィジェット定義が静的であることを想定しているため、ウィジェットのキャッシュを集約するため、ウィジェットのキャッシュをオフにする必要があります。

長期的には、これらのソリューションの両方を実際に推奨することはありません。JSFアプリを別のコンテキストで個別に実行してから、ウィジェットに含める方法を見つけることをお勧めします。Backbase Mashup Servicesを使用して何かをセットアップすることもできますが、単純なiframeアプローチをお勧めします。必要に応じて、シームレスなiframe(スクロールバーなどなし)を作成するためのより高度なiframeBackbaseウィジェットを提供できます。

さらにサポートが必要な場合は、https://my.backbase.comでサインアップすることをお勧めします。より多くの専用ヘルプ、ドキュメント、コードサンプルを受け取る必要があるBackbaseの新しいサポートサイト。

于 2012-09-20T10:50:18.163 に答える