2017-03-26 3 views
1

Ich habe Probleme mit meinem h: selectOneMenu und f: selectItemsDrucken von zwei separaten Arrays als itemLabel und Wert in jsf f: selectItems?

ich den „Wert“ will aus meiner Reihe von Zahlen-Liste für jede dieser

private double list = {51.1511, 53.51351, 0.634343, 2.52555} 

und die Etikett genannt genommen werden Werte

private String curr = {PYN, DKT, ALT, BIT} 

Zeit sein ich tun

<h:selectOneMenu value="#{serviceBean.select2}"> 
    <f:selectItems value="#{serviceBean.list}" itemLabel="#{serviceBean.curr}" /> 
</h:selectOneMenu> 

Das funktioniert, gibt mir den Wert als Zahlen, aber anstatt mir die Strings in der Artikelbezeichnung zu zeigen, zeigt es stattdessen Speicherreferenzen. Wie bekomme ich das um die Strings anzuzeigen?

+0

Tye dies: private endgültige Liste curr = Arrays.asList ("PYN", "DKT", "ALT", "BIT"); –

+0

Es lässt mich nicht ein Setter/Getter für so erstellen, so dass mein selectOneMenu es nicht in der XHTML-Datei sehen kann? edit: Ich habe gerade meinen eigenen Getter mit curr.toString() erstellt und zeigt nun jedes ausgewählte Element als ein vollständiges Array an, so dass jede Zeile jetzt so aussieht [PYN, DKT, ALT, BIT] [PYN, DKT, ALT , BIT] – Kilzrus

Antwort

1
public class General{ 
    private double listValue; 
    private String curValue; 

    public General(String curValue, double listValue){ 
    this.listValue = listValue; 
    this.curValue = curValue; 
    } 

    public double getListValue(){ return listValue;} 
    public String getCurValue(){ return curValue;} 
} 

Ich gehe davon aus, dass Sie Ihre Objekte erzeugt und erstellen Sie eine Arraylist ArrayList<General> myvalues

ArrayList<General> myvalues = new ArrayList<>(); 
myvlues.add(new General("PYN",51.112)); 
... 

<h:selectOneMenu value="#{serviceBean.selectedItem}"> 
<f:selectItems value="#{serviceBean.myvalues}" 
       var="myvalue" 
       itemValue="#{myvalue.listValue}" 
       itemLabel="#{myvalue.curValue}"/> 
</h:selectOneMen> 
+0

Hallo, ich habe das versucht, aber immer noch nicht funktioniert dies nur gibt mir den Fehler Cant Instantiate-Klasse: Bean.ServiceBean. Ich verstehe nicht, warum value = "" mir erlaubt, das Array zu lesen, aber beide itemValue = "" und itemLabel = "" den Speicherort ausdrucken. Was verursacht das und gibt es eine Möglichkeit für mich, es mit einer Art von .toString() zu umgehen? – Kilzrus

+1

Da der Wert ein Objekt sein kann und Wert und Label unterschiedlich sein können. also nur übergeben objekt und seine toString-methode in den meisten fällen nicht genug. Anyway jetzt ändern und überprüfen '' und wenn das nicht der Hauptfehler ist schreibe bitte die ganze Fehlerzeile – mismanc

+0

Sorry was meinst du mit change value = "# {serviceBean.select2}"? Ändere es in was? ich habe select1 und select2 als Variablen damit ich das Ergebnis in Parameter meines Webservice weitergeben kann, bekomme ich immer noch "Kann Klasse nicht instanziieren: Bean.ServiceBean" – Kilzrus

0

Sie sollten verwaltete Beans verwenden, um auf das Model contains in der Präsentationsschicht zuzugreifen.

Die Managed Bean:

@Named 
@SessionScoped 
public class MyBean 
{ 
    private final List<Double> values = Arrays.asList(1.1, 2.1, 3.1); 
    private final List<String> labels = Arrays.asList("AAA", "BBB", "CCC"); 
    private Double selectedItem; 

    public List<String> getItems() 
    { 
    return labels; 
    } 

    public Double getValueAt(int ndx_) 
    { 
    return values.get(ndx_); 
    } 

    public String getLabelAt(int ndx_) 
    { 
    return labels.get( ndx_); 
    } 

    public Double getSelectedItem() 
    { 
    return selectedItem; 
    } 

    public void setSelectedItem(Double selectedItem_) 
    { 
    selectedItem = selectedItem_; 
    } 

} 

Die JSF Facelet:

<h:selectOneMenu value="#{myBean.selectedItem}"> 
    <c:forEach items="#{myBean.items}" var="item" varStatus="itemIndex"> 
    <f:selectItem itemValue="#{myBean.getValueAt(itemIndex.index) }" itemLabel="#{myBean.getLabelAt(itemIndex.index)}"/> 
    </c:forEach> 
</h:selectOneMenu> 
+0

Nur ausprobiert und nums gibt mir einen Fehler, unerwarteten Typ zu sagen Erforderlich: Referenz, gefunden: Doppel Irgendwelche Ideen? – Kilzrus

+0

OK. Ich habe "double" zu "Double" geändert –

+0

Ich habe auch Double versucht, aber das funktioniert auch nicht. – Kilzrus

Verwandte Themen