编程语言
首页 > 编程语言> > java-在发生异常后显示来自liferay挂钩服务的自定义错误消息

java-在发生异常后显示来自liferay挂钩服务的自定义错误消息

作者:互联网

我使用Hook覆盖了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);
}

但是最终用户的结果如下所示.即使在日志中显示了实际错误,用户也无法从该消息中了解到底在后台发生了什么.

enter image description here

我不知道如何从Hook向最终用户显示自定义错误消息.还可以返回同一页面来编辑同一文章.

解决方法:

在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的完整示例

标签:liferay,java,liferay-hook
来源: https://codeday.me/bug/20191118/2031221.html