如何在JSF

时间:2017-07-30 00:36:29

标签: jsf-2

我有一个特定类的对象列表。每个对象都有两个字段:idvalue。我必须通过JSF显示该列表,每行两个元素,如:

id1 value1 id2 value2
id3 value3 id4 value4
id5 value5 id6 value6

我不希望他们以随机方式被扔到那里。我宁愿考虑在一些表格中显示它(有4列),所以它们看起来不会很混乱(如果一个值比其他值短)。

我考虑过使用h:panelGroup,但我不能使用c:forEach,因为我的列表在那时没有可用(是的,我累了,它没有打印出来)。 ui:repeat不能与h:panelGroup一起使用。

我认为我不能使用h:dataTable,因为我需要在一行中打印两个列表元素,而h:dataTable并不是用这样的东西创建的。

我该怎么办?

(我是JSF-noob,或者......最糟糕的是:我 JSF-noob,然后长时间没有联系它)

1 个答案:

答案 0 :(得分:0)

要解决此问题,首先必须将列表成对分组,然后可以使用ui:repetat + html表打印结果,如:

@Named(value = "newJSFManagedBean")
@SessionScoped
public class NewJSFManagedBean implements Serializable {

    private List<String> cars;
    private List<List<String>> finalList;

    /**
     * Creates a new instance of NewJSFManagedBean
     */
    public NewJSFManagedBean() {
    }

    @PostConstruct
    public void loadCars() {
        //Load main list
        cars = new ArrayList<>();
        cars.add("Volvo");
        cars.add("Volvo1");
        cars.add("Volvo2");
        cars.add("Volvo3");
        cars.add("Volvo4");
        cars.add("Volvo5");
        cars.add("Volvo6");
        cars.add("Volvo7");
        cars.add("Volvo8");
        cars.add("Volvo9");
        //Gruping in pairs
        finalList = new ArrayList<>();
        List<String> groupList = new ArrayList<>();
        for (String car : cars) {
            if (groupList.size() == 2) {
                finalList.add(groupList);
                groupList = new ArrayList<>();
            }
            groupList.add(car);
        }
        finalList.add(groupList);
    }

    public List<String> getCars() {
        return cars;
    }

    public void setCars(List<String> cars) {
        this.cars = cars;
    }

    public List<List<String>> getFinalList() {
        return finalList;
    }

    public void setFinalList(List<List<String>> finalList) {
        this.finalList = finalList;
    }

}

和xhtml

<table>
            <tr>
                <th>ID</th>
                <th>VALUE</th>
                <th>ID</th>
                <th>VALUE</th>
            </tr>

            <ui:repeat var="item"
                       value="#{newJSFManagedBean.finalList}">
                <tr>
                    <ui:repeat var="subItem"
                               value="#{item}">
                        <td>someId</td>
                        <td>#{subItem}</td>
                    </ui:repeat>
                </tr>
            </ui:repeat>


        </table>

结果: see