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ä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