docs: private String toPostParameters(String getRequestUri, CmsSearch search) {
  
          StringBuffer result;
          String formname = "";
  
          if (!m_formCache.containsKey(getRequestUri)) {
  
              result = new StringBuffer();
              int index = getRequestUri.indexOf('?');
              String query = "";
              String path = "";
              if (index > 0) {
                  query = getRequestUri.substring(index + 1);
                  path = getRequestUri.substring(0, index);
                  formname = new StringBuffer("searchform").append(m_formCache.size()).toString();
  
                  result.append("\n<form method=\"post\" name=\"").append(formname).append("\" action=\"");
                  result.append(path).append("\">\n");
                  // "key=value" pairs as tokens:
                  StringTokenizer entryTokens = new StringTokenizer(query, "&", false);
                  while (entryTokens.hasMoreTokens()) {
                      StringTokenizer keyValueToken = new StringTokenizer(entryTokens.nextToken(), "=", false);
                      if (keyValueToken.countTokens() != 2) {
                          continue;
                      }
                      // Undo the possible already performed url encoding for the given url
                      String key = CmsEncoder.decode(keyValueToken.nextToken());
                      String value = CmsEncoder.decode(keyValueToken.nextToken());
                      if ("action".equals(key)) {
                          // cannot use the "search"-action value in combination with CmsWidgetDialog: prepareCommit would be left out!
                          value = CmsWidgetDialog.DIALOG_SAVE;
                      }
                      result.append("  <input type=\"hidden\" name=\"");
                      result.append(key).append("\" value=\"");
                      result.append(value).append("\" />\n");
                  }
  
                  // custom search index code for making category widget - compatible
                  // this is needed for transforming e.g. the CmsSearch-generated
                  // "&category=a,b,c" to widget fields categories.0..categories.n.
                  List<String> categories = search.getParameters().getCategories();
                  Iterator<String> it = categories.iterator();
                  int count = 0;
                  while (it.hasNext()) {
                      result.append("  <input type=\"hidden\" name=\"");
                      result.append("categories.").append(count).append("\" value=\"");
                      result.append(it.next()).append("\" />\n");
                      count++;
                  }
                  List<String> roots = search.getParameters().getRoots();
                  it = roots.iterator();
                  count = 0;
                  while (it.hasNext()) {
                      result.append("  <input type=\"hidden\" name=\"");
                      result.append("roots.").append(count).append("\" value=\"");
                      result.append(it.next()).append("\" />\n");
                      count++;
                  }
  
                  result.append("  <input type=\"hidden\" name=\"");
                  result.append("fields").append("\" value=\"");
                  result.append(CmsStringUtil.collectionAsString(search.getParameters().getFields(), ","));
                  result.append("\" />\n");
  
                  result.append("  <input type=\"hidden\" name=\"");
                  result.append("sortfields.").append(0).append("\" value=\"");
                  result.append(search.getParameters().getSortName()).append("\" />\n");
  
                  result.append("</form>\n");
                  HTMLForm form = new HTMLForm(formname, result.toString());
  
                  m_formCache.put(getRequestUri, form);
                  return formname;
              }
              // empty String for no get parameters
              return formname;
  
          } else {
              HTMLForm form = m_formCache.get(getRequestUri);
              return form.m_formName;
          }
      }