2012-07-09 117 views
1

我正在使用Primefaces SelectOneMenu(http://www.primefaces.org/showcase-labs/ui/selectOneMenu.jsf)和演示中描述的「自定義內容」版本。Primefaces中的自定義內容selectOneMenu沒有持續對象

問題是隻有在綁定到下拉字段的字段的實際值是用作value的對象類型時,這些列才起作用。

下工作(如果Bean.fieldSelectObject類型):

<p:selectOneMenu value="#{bean.field}" 
    var="x"> 
    <f:selectItems 
     value="#{valuesBean.getSelectItems()}" var="bt" 
     itemLabel="#{bt.label}" itemValue="#{bt}" /> 
    <p:column> 
     <h:outputText 
      value="#{x.value}" /> 
    </p:column> 
    <p:column> 
     <h:outputText value="xyz" /> 
    </p:column> 
</p:selectOneMenu> 

下不起作用(StringBean.field):

<p:selectOneMenu value="#{bean.field}" 
    var="x"> 
    <f:selectItems 
     value="#{valuesBean.getSelectItems()}" var="bt" 
     itemLabel="#{bt.label}" itemValue="#{bt.value}" /> 
    <p:column> 
     <h:outputText 
      value="#{x.value}" /> 
    </p:column> 
    <p:column> 
     <h:outputText value="xyz" /> 
    </p:column> 
</p:selectOneMenu> 

在第一個版本中,xyz是顯示爲第二列,在第二個版本中不顯示。我遇到的問題是,現在我需要將類型爲SelectObject的對象保存在數據庫中,但我也可以將value字段的字符串保存在那裏。

有沒有一種很好的方法來處理這個問題?

+0

嘗試使bean.field的getter/setter的類型爲Object例如setField(Object value),Object getField() – BestPractices 2012-07-09 13:45:57

+0

這與'Bean'是一個JPA實體並且'String'類型反映在相應數據庫列中的事實相沖突。 – 2012-07-09 14:07:28

+0

我通過使用實際的對象作爲'bean.field'的類型來解決這個問題。但我不保存序列化,而是使用'@ OneToOne'代替。這個工作,雖然現在我有很多條目填寫我的「項目」表。無論如何,現在可以「關閉」了。 – 2012-07-10 10:14:01

回答

0

使用Converter將所選菜單項(bt.value)的值轉換爲綁定到p:selectOneMenu(bean.field)的支持bean方法所期望的值。

<p:selectOneMenu value="#{bean.field}" var="x" converter="yourconverterid"> 
+0

我做過/嘗試過。基本功能可以工作,但自定義內容的列不起作用。所以要麼我有bean.field的原始類型,要麼我可以使用自定義內容/列。看來我無法使用兩者(這正是我所需要的)。 – 2012-07-09 15:41:15

+0

PrimeFaces Showcase中的示例使用具有自定義內容的轉換器。請仔細檢查你是否有缺陷。當我遇到像這樣的問題時,我通常會發現通過創建一個簡單的測試用例(存根數據並且不會與後端集成)來簡化事情非常有用。請注意,如果它是ViewScoped,請確保您嘗試綁定到選擇列表中的任何內容都是可序列化的,並且您的支持Bean是可序列化的。 – BestPractices 2012-07-09 16:52:20

+0

當且僅當該字段具有對象類型時,轉換器和用於顯示下拉菜單的「自定義內容」才起作用。如果該字段具有原始類型,則不起作用,例如只是一個字符串。 – 2012-07-10 06:42:17

相關問題