2012-03-14 43 views
0

我試圖把那獲取建議,Manged豆代碼Entry<String, Integer>這是在primefaces自動完成中的錯誤嗎?

<p:autoComplete completeMethod="#{suggester.suggestTopics}" 
      var="x1" itemLabel="#{x1.key}" itemValue="#{x1.value.toString()}" 
      value="#{topicController.selected}" /> 

列表的自動完成功能如下:

private int selected; 

public int getSelected() { 
    return selected; 
} 

public void setSelected(int selected) { 
    this.selected= selected; 
} 

但這種失敗說Integer類沒有名爲key的方法/屬性。如果我從自動完成中刪除value屬性,則它開始正常工作。但是當我把值屬性,它開始期望var內的對象應該是value屬性內的類型。我相信/預計應該是itemValue中的對象應該與value屬性中的對象屬於同一類型。

我想使用的POJO的建議,但僅僅通過實體ID爲值


使用: Primefaces 3.1 JSF 2.1.6

回答

0

我想你想使用Simple auto complete,但是您卻看到了Pojo Support

展示的錯誤示例x1指向int selected - wh ILE指望它被稱爲一個POJO(密鑰和值屬性。),這就是爲什麼你得到消息

Integer類沒有方法/屬性命名的鍵

或者簡單的用在Simple auto complete

+0

我想使用POJO的建議,但只傳遞實體Id值 – 2012-03-14 12:00:13

+0

爲什麼你不傳遞對象,並利用它的ID屬性? – Daniel 2012-03-14 12:45:06

+0

我不太喜歡這種方法,因爲這需要我再次從數據庫獲取數據,重建對象和使用轉換器,否則可能通過傳遞entityId來避免.. – 2012-03-14 12:58:12

1

我相信/希望它應該是內部項目值對象應 是同樣的類型內在價值屬性。

是的,這是有道理的,它是在primefaces showcase相同:

<p:autoComplete value="#{autoCompleteBean.selectedPlayer1}" 
       id="basicPojo" 
       completeMethod="#{autoCompleteBean.completePlayer}" 
       var="p" itemLabel="#{p.name}" itemValue="#{p}" 
       converter="player" forceSelection="true"/> 

正如你看到的是var="p"itemValue="#{p}其中p是Player一個實例。 selectedPlayer1也是Player的一個實例。

我不知道它是否適用於Map,因爲Primefaces示例被稱爲「Pojo支持」,建議應該是與value屬性中相同類型的元素的List

+0

感謝馬特,但我不太喜歡這種方法,當我需要傳遞給數據庫只是所選播放器的ID,這需要我再次從數據庫中獲取數據,重建播放器對象和使用轉換器,否則可能通過傳遞playerId來完成... – 2012-03-14 11:48:37

+0

我想使用POJO的建議,但只傳遞實體Id的值 – 2012-03-14 11:56:13

0

正如Matt所評論的,你不需要從Db重建Player(Pojo)。你可以簡單地設置Player(Pojo)的id屬性,並且在action方法中可以利用這個id從DB中獲取它。

在轉換你的情況,你可能會做

Entry<String, Integer> e = new Entry<String, Integer>(); 
e.setId(value) // where value is passed in to convertor in method getAsObject..... 

該值將被設置爲

我已經使用POJO的自動完成但泛型類沒有試過。

希望這會有所幫助。

0

我知道這個問題已經過時了,但我遇到了同樣的問題。 問題是你必須把var賦給p(var =「p」)。我認爲這是非常不明顯的(文檔沒有提及它必須這樣),因爲我認爲我可以指定任何我想要的var名稱。