2016-10-13 7 views
0

${products} enthält eine List<Product>. Product ist ein @Entity, hat eine equals Methode, die durch id vergleicht. Es gibt keinen Konverter oder Formatierer registriert für Product (außer Spring Data des DomainClassConverter aber das scheint nicht für diesen Fall zu treten in):Spring Form Option nicht Element auswählen, Optionen

Dies funktioniert:

<form:select path="productFrom"> 
    <form:option value="" label="-" /> 
    <form:options items="${products}" itemValue="id" itemLabel="name"/> 
</form:select> 

Diese (benötigt für optgroup-ing , aber hier vereinfacht) nicht den richtigen Wert aus:

<form:select path="productFrom"> 
    <form:option value="" label="-" /> 
    <c:forEach items="${products}" var="product"> 
     <form:option value="${product.id}">${product.name}</form:option> 
    </c:forEach> 
</form:select> 

nach SelectedValueComparator Debuggen ich fand, dass es eine candidateValue vom Typ Long zu einemzu vergleichen versuchtvon String. Ich könnte dies umgehen, indem Sie eine toString() Methode in Produkt erstellen, die die id als String zurückgibt. (Oder ich könnte die equals() Methode geändert haben, um zu behandeln.)

Noch habe ich ein schlechtes Gefühl, dass ich hier etwas falsch mache.

Antwort

0

Am Ende löste ich dies durch eine neue Methode Product Zugabe:

public String getIdString() { 
    return id == null ? "" : id.toString(); 
} 

und die Option Definition zu ändern:

<form:option value="${product.idString}">${product.name}</form:option> 

Immer noch nicht sicher, ob ich tue dies dem richtigen Weg, Irgendwelche Tipps werden geschätzt.

+0

Wieder mit mir selbst zu sprechen, leider akzeptieren meine eigene Antwort dann ... Seufzer – Arthur

Verwandte Themen