如何从JSP访问SessionErrors对象?我试过了

<%@page import="com.liferay.portal.kernel.servlet.SessionErrors"%>

<%= SessionErrors.contains(request, "error-invalid-value") %> <br>
<%= SessionErrors.size(request) %>


但是结果为false和0。但是,错误标记可以正常工作(它显示抛出的错误)。

<liferay-ui:error key="error-invalid-value" message="error-invalid-value" />


在我的控制器中,我这样设置错误:

//request is an ActionRequest.
SessionErrors.add(request, "error-invalid-value");


我正在尝试测试是否已引发“错误无效值”错误。

如果有帮助,请参见以下代码的源代码(我无法理解其中的任何内容):https://github.com/liferay/liferay-portal/blob/master/util-taglib/src/com/liferay/taglib/ui/ErrorTag.java

最佳答案

一种使用方法是

<liferay-ui:error key="error-invalid-value"
   message="translation-key-for-the-message-to-be-shown" />


如果您像问题中所述那样调用了SessionErrors.add,它将显示所引用的消息。否则它什么也不会显示。

使用它的另一种方法(因为它是唯一的静态方法),使其仅在scriptlet或您自己的标记中使用其常规接口:

<% if(SessionErrors.size(renderRequest) > 2) { %>
   Wow, you have triggered a lot of errors
<% } %>


检查完整的interface of SessionErrors以查找更多选项以查找特定错误,访问整个keySet或其他信息

更新:发表评论后,我再次尝试过,实际上错过了SessionErrors的PortletRequest参数:您可以使用HttpServletRequestPortletRequest(例如actionRequest)添加错误。通过ActionRequest添加时,必须将PortletRequest参数用于SessionErrors.doSomething,而不是HttpServletRequest。在JSP上,requestHttpServletRequest,而renderRequestPortletRequest。那就是您要使用以获得结果的那个。

10-05 21:21