我正在使用Spring MVC和Spring Data,並且還配置了Spring Data的DomainClassConverter
以自動將String id轉換爲相應的Domain類。Spring tag <form:option>不適用於Spring Data DomainClassConverter?
現在我執行使用標籤使用以客戶參考:
<form:select path="customer">
<form:option value="" label="Select" />
<form:options items="${customers}" itemValue="id" />
</form:select>
導致在給定的HTML:
<select id="customer" name="customer" class="span6">
<option value="">Select</option>
<option value="1">Customer A</option>
<option value="2">Customer B</option>
<option value="3">Customer C</option>
</select>
當提交與例如後客戶A選擇我得到像一個例外:
org.apache.jasper.JasperException: org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.validation.constraints.NotNull @javax.persistence.ManyToOne nl.kapsalonreflection.domain.Customer for value ''; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null!
所收到的值應該是1,而不是「這沒有任何意義可言」。 我也調試接收到的請求參數,它僅包含客戶= 1(預期)
注意,InvalidDataAccessApiUsageException
從春數據的DomainClassConverter
來了,如果我刪除了此轉換器不會再出現問題。
我也調試的DomainClassConverter
什麼,我可以看到它試圖掩蓋兩次。 首先用String值1(如預期的那樣),然後再用另一個空字符串調用,導致異常。
它得到的怪異,但...
當我與普通的HTML元素<option value="">Select</option>
更換<form:option value="" label="Select" />
那麼異常不會發生,因此只有1調用,以轉換方法與字符串1. 的奇怪的是,這兩個<form:option value="" label="Select" />
和<option value="">Select</option>
產品相同的HTML輸出...
我無法解釋的行爲......雖然我seemm有一個「處理方法」與普通的HTML元素我想知道是什麼原因造成問題。
的'值= 「$ {NULL}」'的伎倆。非常感謝您的幫助,因爲我完全陷入困境,走錯了路。仍然無法解釋爲什麼DomainClassConverter嘗試轉換兩次。一次具有實際價值,一次具有空值'... –