Vorbei an einem Enum-Wert als parameter von JSF (revisited)

Vorbei an einem Enum-Wert als parameter von JSF

Dieser Frage bereits befasst sich mit diesem Problem, aber die vorgeschlagene Lösung hat nicht für mich gearbeitet. Ich definiere die folgende Aufzählung meiner backing-bean:

public enum QueryScope {
  SUBMITTED("Submitted by me"), ASSIGNED("Assigned to me"), ALL("All items");

  private final String description;

  public String getDescription() {
    return description;
  }

  QueryScope(String description) {
    this.description = description;
  }
}

Dann benutze ich es als einen parameter einer Methode

public void test(QueryScope scope) {
  //do something
}

Und verwenden Sie es über EL in meine JSF Seite

<h:commandButton
      id        = "commandButton_test"
      value     = "Testing enumerations"
      action    = "#{backingBean.test('SUBMITTED')}" />

So weit, So gut - identisch zu der Fragestellung die ursprüngliche Frage. Ich habe jedoch, um mit einer javax.servlet.ServletException: Method not found: %fully_qualified_package_name%.BackingBean.test(java.lang.String).

So scheint es, dass JSF ist die Interpretation die Methode anrufen so, als würde ich wie eine Methode aufrufen mit String als parameter geben (die natürlich nicht vorhanden ist) - daher keine implizite Konvertierung stattfindet.

Was könnte der Faktor, dass macht das Verhalten unterscheiden sich in diesem Beispiel aus der aforelinked?

  • hat der backingbean hat eine Instanz von QueryScope? kann nicht sehen, Ihre gesamte backingbean Klasse, aber ich könnte mir vorstellen, dass wäre ein Grund, warum jsf ist nicht die Registrierung der enum
  • Die enum definition ist Teil der BackingBean Klasse. Es hat selbst keine Instanz von QueryScope als Mitglied.
Schreibe einen Kommentar