code: protected void buildUrlParts(StringBuilder sb, UrlChain chain) { // also contains path variables
          final Object[] urlParts = chain != null ? chain.getUrlParts() : null;
          boolean existsParts = false;
          if (urlParts != null) {
              for (Object param : urlParts) {
                  if (param != null) {
                      sb.append(param).append(URL_DELIMITER);
                      existsParts = true;
                  }
              }
          }
          if (existsParts) {
              sb.delete(sb.length() - 1, sb.length()); // e.g. member/edit/3/ to member/edit/3
          }
      }
docs: ---------