public static JwList<Integer> getIdsFromWebKeys(JwList<String> webKeys) {
    JwList<Integer> v = new JwList<Integer>();
    if (webKeys == null) return v;
    if (webKeys.isEmpty()) return v;

    for (String e : webKeys) v.add(getIdFromWebKey(e));
    return v;
  }
  public static JwList<String> getNumbersFromWebKeys(JwList<String> webKeys) {
    JwList<String> v = new JwList<String>();
    if (webKeys == null) return v;
    if (webKeys.isEmpty()) return v;

    for (String e : webKeys) v.add(getNumberFromWebKey(e));
    return v;
  }
  public boolean validate(ScServletData data) {
    if (hasDegreesError(data)
        || hasMinutesError(data)
        || hasSecondsError(data)
        || hasDirectionError(data)) {
      String msg = "Cannot parse value.";
      String sample = getSampleFormat();
      if (sample != null) msg += "  Sample: " + sample;
      getState(data).addError(msg);
      return false;
    }

    if (_validator == null) return true;

    JwList<JwErrorIF> errors = new JwList<JwErrorIF>();
    _validator.validate(getValue(data), errors);
    if (errors.isEmpty()) return true;

    getState(data).setErrors(errors);
    return false;
  }