When calling SessionErrors.add(HttpServletRequest, ...) the error keys are set into the portal session without any portlet / layout (etc.) prefix. This is the only option when doing so from Struts actions or Filters where there is no PortletRequest. In many cases such actions/filters will issue a HTTP redirect to a MVCRenderCommand, resulting in the rendering of a JSP containing <liferay-ui:error/> tags.
Unfortunately in such scenarios the tag will not find the error, because it looks it up with the portlet RenderRequest which applies a prefix to the error key.
It is possible to work around this by using code like the following, but then the error message icon/styling is incorrect and must be manually added.