docs: @RequestMapping(method = RequestMethod.POST, params = "action=updateAttributes")
      public ModelAndView updateAttributes(
              HttpServletRequest request,
              HttpServletResponse response,
              @RequestParam("targetId") String targetId,
              @RequestBody Map<String, Map<String, String>> attributes) {
          IUserLayoutManager ulm =
                  userInstanceManager
                          .getUserInstance(request)
                          .getPreferencesManager()
                          .getUserLayoutManager();
  
          if (!ulm.getNode(targetId).isEditAllowed()) {
              response.setStatus(HttpServletResponse.SC_FORBIDDEN);
              return new ModelAndView(
                      "jsonView",
                      Collections.singletonMap(
                              "error",
                              getMessage(
                                      "error.element.update",
                                      "Unable to update element",
                                      RequestContextUtils.getLocale(request))));
          }
  
          // Update the attributes based on the supplied JSON (request body name-value pairs)
          IUserLayoutNodeDescription node = ulm.getNode(targetId);
          if (node == null) {
              logger.warn("[updateAttributes()] Unable to locate node with id: " + targetId);
              response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
              return new ModelAndView(
                      "jsonView",
                      Collections.singletonMap(
                              "error", "Unable to locate node with id: " + targetId));
          } else {
              setObjectAttributes(node, request, attributes);
  
              final Locale locale = RequestContextUtils.getLocale(request);
              try {
                  ulm.saveUserLayout();
              } catch (PortalException e) {
                  return handlePersistError(request, response, e);
              }
  
              Map<String, String> model =
                      Collections.singletonMap(
                              "success",
                              getMessage(
                                      "success.element.update",
                                      "Updated element attributes",
                                      locale));
              return new ModelAndView("jsonView", model);
          }
      }