Jörg Peschke: & Struts: Wertübergabe eines Formulars mit <select>

Hallo,
Ich bastele gerade an einer Struts-Anwendung und komme an einer Stelle nicht weiter:

In einem HTML-Formular in einer JSP-Datei (welches auch sauber angezeigt wird), kann der Benutzer aus einer Selectbox einen Kunden auswählen:

(JSP-Ausschnitt)
<logic:notEmpty name="CustomerListForm">
    Bitte w&auml;hlen Sie einen Kunden aus:
    <html:form action="customerSelection">
    <html:select name="CustomerListForm" property="selectedCustomer">
       <html:optionsCollection property="customerList" value="customerId" label="customerName" />
    </html:select>
    <html:hidden property="do" value="selectCustomer" />
    html:submit/
    </html:form>
</logic:notEmpty>

(Die entsprechende Form-Bean heisst "CustomerListForm", der "kritische" Parameter "selectedCustomer")

Problem ist: Beim Submit gibt es ein Problem, offenbar mit der Übergabe des Wertes aus der Select-Box (wenn ich diese entferne, gehts):

javax.servlet.ServletException: BeanUtils.populate
java.lang.IllegalArgumentException: argument type mismatch

Nach ein paar Googlern fand ich, dass das Problem meist daher rührt, dass die Setter-Methode in der Form-Bean einen anderen Datentyp erwartet, als übergeben wird.

Die FormBean hat aber Setter, die fast beliebige Datentypen annehmen können:

public void setSelectedCustomer(Customer selectedCustomer) {
  this.selectedCustomer = selectedCustomer;
 }

public void setSelectedCustomer(String id) {
  DBLayer db = new DummyDB();
  db.connect();
  this.selectedCustomer = db.getCustomerById(Integer.parseInt(id));
 }

public void setSelectedCustomer(int id) {
  DBLayer db = new DummyDB();
  db.connect();
  this.selectedCustomer = db.getCustomerById(id);
 }

public void setSelectedCustomer(Object customer) {
  this.selectedCustomer = (Customer) customer;
 }

Muss ich vielleicht irgendwo den Datentyp, der übergeben werden soll definieren? Habe ich eigentlich in der struts.config schon gemacht (selectedCustomer als java.lang.string).

Fällt dazu wem was ein? Ich bin für jede Hilfe dankbar...

Danke und viele Grüße,
Jörg

  1. Hallo,
    Fürs Archiv:

    Die FormBean hat aber Setter, die fast beliebige Datentypen annehmen können:

    Eben da liegt das Problem:
    Offenbar mögen es Form Beans nicht, wenn man die Setter-Methoden einfach beliebig überläd.

    Ich habe jetzt nur noch eine einzige Setter-Methode für den Parameter "selectedCustomer", die als Parameter einen String erwartet, und schon funktionierts tadellos.

    Grüße,
    Jörg