如何从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
参数:您可以使用HttpServletRequest
或PortletRequest
(例如actionRequest
)添加错误。通过ActionRequest
添加时,必须将PortletRequest
参数用于SessionErrors.doSomething
,而不是HttpServletRequest
。在JSP上,request
是HttpServletRequest
,而renderRequest
是PortletRequest
。那就是您要使用以获得结果的那个。