Source Code for the Text Field Widget with No Auto-completion

public class NoAutoCompleteEditRenderer
       extends AbstractEditRenderer {

  public void render(
        Field field, DocumentFragment fragment,
        RendererContext context, RendererContract contract)
        throws ClientException, DataAccessException,
               PlugInException {

    String title = getTitle(field, context.getDataAccessor());
    String targetID = context.addFormItem(field, title, null);

    boolean useDefault = !"false".equalsIgnoreCase(
        field.getParameters().get(FieldParameters.USE_DEFAULT));
    String value = context.getFormItemInitialValue(
        field, useDefault, null);

    Element input = fragment.getOwnerDocument()
        .createElement("input");
    fragment.appendChild(input);

    input.setAttribute("type", "text");
    input.setAttribute("autocomplete", "no");
    input.setAttribute("id", targetID);
    input.setAttribute("name", targetID);

    if (title != null && title.length() > 0) {
      input.setAttribute("title", title);
    }

    if (value != null && value.length() > 0) {
      input.setAttribute("value", value);
    }

    if ("true".equals(field.getParameters()
                        .get(FieldParameters.INITIAL_FOCUS))) {
      input.setAttribute("tabindex", "1");
    }

    String width
        = field.getParameters().get(FieldParameters.WIDTH);
    if (width != null && width.length() > 0
        && !"0".equals(width)) {
      String units;
      if ("CHARS".equals(field.getParameters()
                           .get(FieldParameters.WIDTH_UNITS))) {
        units = "em";
      } else {
        units = "%";
      }
      input.setAttribute("style", "width:" + width + units + ";");
    }

    setScriptAttributes(input, field);
  }
}