在 jsf f:selectItems 中打印两个单独的数组作为 itemLabel 和值?

Printing two seperate arrays as itemLabel and value in jsf f:selectItems?

我的 h:selectOneMenu 和 f:selectItems

有问题

我希望从我的名为 list

的数字数组中获取 "value"
private double list = {51.1511, 53.51351, 0.634343, 2.52555}

并且每个值的标签都是

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

目前我在做

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

这可以给我数值作为数字,但它没有向我显示项目标签内的字符串,而是显示内存引用。我如何让它显示字符串?

您应该使用托管 bean 来访问表示层中包含的模型。

托管 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_;
  }

}

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>
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;}
}

我假设您生成了对象并创建了数组列表 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>