3

フックを使用して、JournalArticleServiceImpl のメソッドaddArticleとメソッドをオーバーライドしています。updateArticle特定の ddmStructureKey を持つすべての記事と、現在の記事の特定のフィールドに一意の値があることを確認しています。

一意でないことがわかった場合、DuplicateEntryException 例外をスローしています。対応する catch メソッド内で、私はreturn null;. しかし、それはNullPointerException. 次に、次のように SystemException をスローしようとしました。

try {
// logic
} catch (DuplicateEntryException e) {
    LOG.error("Value already present", e);
    throw new SystemException("Value already present", e);
}

しかし、エンドユーザーの結果は次のようになりました。ログには実際のエラーが表示されますが、ユーザーはこのメッセージからバックグラウンドで何が起こったのかを正確に理解することはできません。

ここに画像の説明を入力

Hook からカスタム エラー メッセージをエンド ユーザーに表示する方法がわかりません。同じ記事を編集するために同じページに戻ることもできます。

4

2 に答える 2

2

Liferay にエラー メッセージを表示します。

タグなどのセッション メッセージを使用できます<liferay-ui:error>

たとえば、jsp ページでは次のようになります。

<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
...
<liferay-ui:error key="err1" message="Third message" translateMessage="false"/>

または例外を除いて、edit_article.jsp のように:

<liferay-ui:error exception="<%= ArticleContentSizeException.class %>" message="you-have-exceeded-the-maximum-web-content-size-allowed" />

独自の例外クラス、独自のメッセージ キー、および Language.properties 内のキーの値を定義できます。

そして render メソッドでは:

SessionErrors.add(renderRequest, "err1");

または例外をキャッチするとき(e)これを使用します:

SessionErrors.add(renderRequest, e.getClass());

github - portletgithub - hookの完全な例

于 2016-04-06T13:25:17.840 に答える
1

UI レイヤーはこれらのメソッドからの例外を想定していないように見えるため、UI レイヤーまたはアクション レイヤーでも変更が必要になる可能性があります。そうすれば、サービスを変更しなくてもうまくいくかもしれません (事前に確認できるため)。

ハッキーなアイデアは、null を返すのではなく、重複した値を返すことです。更新の成功をシミュレートしますが、既存の記事を返します。これはハックであることに注意してください。常に機能するかどうかはわかりません。壊れるなら壊れ方を教えてください。

于 2016-04-06T12:57:37.553 に答える