2012-10-19 51 views
0

我有一個加載BD列表的selectOneMenu用於對象,而不是內容,調試也已經是所有步驟,除了它顯示了selectOneMenu用於值時是正確的。在頁面上出現對象名稱「JanelaPortabilidade @ 7437」,不像字符串。selectOneMenu用於只出現應該

我的代碼:

public List<SelectItem> listarHoraJanela(DateSelectEvent event) { 

     dataF = event.getDate(); 
     Calendar dataAux = new GregorianCalendar();    
     dataAux.setTime(dataF); 


     //Corrigir 
     if (listaHoraJanela == null) { 

      listaHoraJanela = new ArrayList<JanelaEAPortabilidade>(); 
      listaHoraJanela = consultaJPortabilidade.listarHoraJanela(dataAux); 
      listSelectHoraJ.add(new SelectItem("", ""));    

      for (JanelaEAPortabilidade horaJ : listaHoraJanela) { 
       String dataFormat = String.format("%02d",horaJ.horIniJanela.get(Calendar.HOUR_OF_DAY)); 
       System.out.println(dataFormat);//So here is ok, print in console correct string 
       listSelectHoraJ.add(new SelectItem(horaJ.getIdtJanela(),dataFormat)); 


      } 
     } 

XHTML:

<h:outputText value="Hora da Janela:" for="horaJanela" /> 
<h:selectOneMenu value="#{bean.codHoraJanela}" id="horaJanela"   
    rendered="#{bean.type == 'Fixo'}" > 
<f:selectItems value="#{bean.listaHoraJanela}" /> 

什麼可以嗎?我肯定錯過了什麼。

謝謝!

回答

0

你需要做的是使用itemLabel和對於f項目值屬性:selectItems的。下面是從PrimeFaces網站(http://www.primefaces.org/showcase-labs/ui/selectOneMenu.jsf從代碼的POJO部分)的例子:

<f:selectItems value="#{autoCompleteBean.players}" var="player" itemLabel="#{player.name}" itemValue="#{player}"/> 

的itemLabel是會是什麼顯示在下拉列表中,並且itemValue將返回(在您的示例中的#{bean.codHoraJanela}中)。

+0

我可以用來顯示。現在如何獲得選定的dataFormat?選中的horaJ.getIdtJanela()可以用codHoraJanela獲得,但不知道如何獲取選中的dataFormat。 – Deb

+0

我想你堅持列表listSelectHoraJ,直到用戶做出選擇,然後迭代它直到你找到他們選擇的代碼。然後你可以獲得標籤。由於您的列表似乎超出了範圍,因此您將需要將您的聲明移至某個在整個生命週期中持續存在的地方。整個SelectItem可能回到事件或上下文的某處,但我不知道。或者,由於dataFormat無論如何都是從horaJ.horIniJanela計算出來的,您可以根據用戶選擇的哪個ID重新計算。 – SteveS

+0

我解決這種方式: '代碼 爲(JanelaEAPortabilidade horaJ:listaHoraJanela)(。horaJ.getIdtJanela()等於(codHoraJanela)){ 如果{ HoraFormat字符串=的String.format( 「%02D」 horaJ.horIniJanela。 get(Calendar.HOUR_OF_DAY)); DateFormatAux Integer = Integer.parseInt(horaFormat); calendarAux.add(Calendar.HOUR_OF_DAY,dateFormatAux); parametro.setDateF(calendarAux); } }' – Deb

0

我很驚訝的代碼,甚至工作。如果我沒有錯過代碼應該拋出一個NullPointerException。在JSF中,您發佈了DateSelectEvent未創建,而是調用該方法時沒有任何參數。 Java方法中的DateSelectEvent應該是NULL

您所看到的輸出爲對象的toString()方法的結果。可能這裏表示的對象來自託管bean中的codHoraJanela方法。修復listarHoraJanela方法以返回對象列表。

+2

'listarHoraJanela'!='listaHoraJanela'。 OP顯示的方法可能是由''調用的監聽器方法。 – BalusC

+0

@BalusC哇,沒錯,'r'。 – siebz0r

+0

謝謝!修復這些細節吧! – Deb