3

ショートバージョン

カスタム Web コンテンツ構造を定義しました。ここで、カスタム ポートレットの JSP ベースのビュー内の構造によって定義されたフィールドの 1 つだけにアクセスして出力したいと考えています。

完全にサーバー側で、理想的には完全に JSP 内で実行されるものを探しています (つまり、カスタム コントローラー ロジックや Javascript はありません)。少量のサーブレット コードおよび/または奇妙な JSTL は問題ありません。

より長いバージョン

ユーザー データを表示するカスタム ポートレットを作成しています。特定のユーザーに表示するデータない場合は、代わりに静的コンテンツを表示したいと思います。実際には、通常のデータ表示ではなく、いくつかの静的コンテンツの 1 つを表示したい特別なシナリオがいくつかあります。

メンテナンスを容易にするために、これらの静的コンテンツをポートレット インスタンス構成の一部にしています。また、ポートレットの広範な使用と、これらの静的な部分を 1 か所で管理したいという要望が予想されるため、新しい Web コンテンツ構造を作成して、静的なシナリオごとに個別の名前付き HTML BLOB をキャプチャするつもりです。次に、ポートレット インスタンスは、ID によって Web コンテンツのその部分に依存するように構成されます。その結果、サイト管理者は単一の Web コンテンツを更新できるようになり、サイト全体のすべてのポートレット インスタンスにその変更が自動的に反映されます。

他のポートレットでは、<liferay-ui:journal-article>タグを使用して、Web コンテンツのコンテンツ全体 (portlet-instance 構成で識別される) を発行しました。たとえば、次のようになります。

<liferay-ui:journal-article
    groupId="${_config_templateGroupId}"
    articleId="${_config_templateArticleId}"
/>

ただし、この場合、構造体で定義されたフィールドの1 つだけを出力したいと考えています。

公式 wikiは、journal-article タグがオプションのtemplateId属性を受け入れると述べています。シナリオごとに個別のテンプレートを定義することで、それを機能させることができると思います。各シナリオは、構造から目的のフィールドのみを発行します。ただし、wiki では、templateIdバージョン 6.0.2 より前では無視されていることにも注意してください。私は 6.0 EE を使用しています。サッドフェイス少佐。

利用可能な代替案に興味があります。もちろん、コンテンツ全体を非表示の要素に出力し、Javascript を使用して関連する部分だけをスポットライトに移動することもできますが、フロントエンド開発者として、ベース ドキュメントのプレスクリプトの最小精度に関する私の感性を不快にさせます。

つまり、Javascript または CSS ベースのトリック (別名Smoke-and-mirrors ) はありません。比較的標準的な JSP 内で完全に実装できる 100% サーバーベースのソリューションのみが受け入れられます。

私の願いを叶えてください、ああ偉大で恐ろしいインターネットよ!

4

2 に答える 2

2

私があなたのことを間違って理解していなかった場合Short version、これがあなたが探している解決策になる可能性があります。

Code以下は、同様の要件を実装するために作成したからの抜粋です。

をパラメータ化し、それからXpathを作成できますtag

public static final String DYNAMIC_ELEMENT_NAME = "/root/dynamic-element[@name='";
public static final String NEWS_IMAGE_URL = "imageUrl";
public static final String DYNAMIC_CONTENT = "']/dynamic-content";       

journalArticle = JournalArticleLocalServiceUtil.getArticle(Long.valueOf(journalArticleId));
Document document = SAXReaderUtil.read(journalArticle.getContent());
String xpathExpression = Constants.DYNAMIC_ELEMENT_NAME + Constants.NEWS_IMAGE_URL + Constants.DYNAMIC_CONTENT;
if (document.selectSingleNode(xpathExpression) != null) {
    String imageUrl = document.selectSingleNode(xpathExpression).getText();
}
于 2013-06-26T21:08:44.313 に答える