2016-10-13 139 views
0

${products}包含List<Product>Product是一個@Entity,有一個equals方法比較id。有沒有爲Product註冊的轉換器或格式化(除春節數據的DomainClassConverter但是這似乎並沒有踢在這種情況下):彈簧窗體選項不選擇項目,選項是

這工作:

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

這(需要OPTGROUP-ING ,但這裏的簡化)沒有選擇正確的值:

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

調試SelectedValueComparator我發現,它試圖Long類型的candidateValue比作後String的。我可以通過在產品中創建toString()方法來解決這個問題,該方法返回id作爲String。 (或者我可以修改equals()方法來處理Long。)

不過,我有一種糟糕的感覺,我在這裏做錯了什麼。

回答

0

最後我解決了這個通過添加新的方法來Product

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

和更改選項定義:

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

仍不能確定我這樣做是正確的方式,任何提示都表示讚賞。

+0

再次與自己說話,不幸的是,接受我自己的答案然後...嘆了口氣 – Arthur