2013-08-21 57 views
0

我做了一些測試,看看如何可以將組合框綁定到某些bean屬性,但我得到一個異常:「ConversionException:無法將值轉換爲字符串........ ...「 我的示例工作與indexedContainer爲組合框,但我有一些與BeanItem容器的麻煩。 我有:1。 TestCountry,簡單的java bean的BeanItemContainer(我不把這裏的setter和getter或構造爲簡單起見):Combobox與BeanItemContainer和BeanFieldGroup拋轉換異常

public class TestCountry implements Serializable { 
    private String name; 
    private String shortName; 
} 
  1. BeanItemContainer

    BeanItemContainer<TestCountry> _data = new BeanItemContainer<TestCountry>(TestCountry.class); 
    _data.addItem(new TestCountry("Afganistan","AF")); 
    _data.addItem(new TestCountry("Albania","AL")); 
    
  2. 的實例
  3. bean提交組。這裏testBean這個是簡單的字符串屬性的( 「名字」, 「手機」, 「contry」)

    BeanFieldGroup<TestBean> binder = new BeanFieldGroup<TestBean>(TestBean.class); 
    
  4. 組合框

    ComboBox myCombo = new ComboBox("Select your country", _data); 
    
  5. 必不可少代碼另一個bean

    binder.bind(myCombo, "country"); 
    

當我嘗試提交綁定器時,我得到了有關轉換問題的錯誤信息。從我理解的閱讀書籍和vaadin api中,BeanItemContainer使用bean自身作爲標識符和(這裏可能是錯誤的)活頁夾使用項目標識符來綁定屬性。所以問題在於,從Bean到字符串的轉換。 我試着在我的TestCountry bean上實現toString(),hash()和equals(),但沒有成功。在這種情況下可以使用BeanItemContainer做些什麼?

在此先感謝!

回答

0

您讓Vaadin應用程序嘗試將Bean(TestCountry)作爲String保存在TestBean中。

這很好,但你必須接近它有點不同。你有兩個選擇。你要麼改變你的數據模型,所以testBean這個看起來是這樣的:

TestBean 
firstName - String 
phone - String 
country - TestCountry (1:n) 

現在中,testBean將已經存儲,而不是一個字符串的TestCountry和你的組合框不應該拋出任何更多的錯誤

你不要用Beans填充你的ComboBox,而是用Country字符串填充,所以Vaadin應用程序知道選擇的數據類型以及保存在TestBean中的內容。

myCombo.addItem(getStringOfCountryYouWantToAdd()) 
... 

然後如果你的String屬性「國家」綁定到只包含字符串現在的組合框,粘結劑將現在怎麼樣,什麼保存成「國家」。

+0

謝謝你的建議!第一個想法更好,並且運作良好! – vlad2005