如何用ui显示单选按钮:重复?

时间:2014-08-04 11:54:15

标签: jsf facelets uirepeat selectoneradio

我在JSF页面上显示一些数据时遇到了一些麻烦。 它涉及我编写的比萨sql搜索程序。 java程序本身工作正常,但输出会产生一些问题。

所有比萨都存储在实例的ArrayList中,例如List< PizzaObject取代。 PizzaObject类包含其他实例,如' Pizza',' Topping' Size' Size'。所以它是包含变量数据的不同类的嵌套列表。

对于我的输出,我使用了ui:repeat方法。披萨及其属性没有问题。但是当它显示它们的大小嵌套在一个ui-repeat循环中作为SelectOneRadio按钮时,没有输出。

所有比萨都存储在ArrayList中,如下所示:

List<PizzaObject> results = new ArrayList<PizzaObject>();

PizzaObject类看起来像这样:

public static class PizzaObject {
   Pizza pizza;
   List<Size> sizeList;
   List<Topping> toppingList;

   public PizzaObject(Pizza pizza, List<Size> sizeList, List<Topping> toppingList) {
      this.pizza = pizza;
      this.sizeList = sizeList;
      this.toppingList = toppingList;
   }

   // getter and setter
}

类Pizza,Topping和Size包含属于每个Pizza对象的不同属性。 例如,Size类看起来像这样:

public static class Size {
   int sizeID;
   int diameter;

   public Size(int sizeID, int diameter) {
        this.sizeID = sizeID;
        this.diameter = diameter;
   }

   // getter and setter
}

在我的JSF输出页面中,我现在想要显示每个披萨及其每个尺寸和浇头。但由于它们没有相同的大小,我需要迭代列表sizeList,这就是错误发生的地方。

<ui:repeat var="results" value="#{pizzaSearchBean.results}">
   <p>#{results.pizza.name}</p>
   <p>sizes: </p>
   <h:selectOneRadio id="pizzasize" value="#{pizzaSearchBean.pizzasize}">
      <ui:repeat var="sizes" value="#{results.sizeList}">
         <f:selectItem id="size" itemLabel="#{sizes.diameter}" itemValue="#{sizes.sizeID}"/>
      </ui:repeat>
   </h:selectOneRadio>
</ui:repeat>

我不知道为什么没有无线电盒的输出,但我不认为我已经错误地实现了它。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

查看[<f:selectitems>][1],这是为了根据集合呈现多个组件。例如,您可以将<ui:repeat>替换为

<f:selectItems value="#{results.sizeList}" var="size"
               itemLabel="#{size.diameter}" itemValue="#{size.sizeId}" />