Jsf 排序和数据模型–;CollectionDataModel,setRowIndex()的用途是什么?

Jsf 排序和数据模型–;CollectionDataModel,setRowIndex()的用途是什么?,jsf,datatable,jsf-2.2,datamodel,Jsf,Datatable,Jsf 2.2,Datamodel,每个集合(List,HashMap等等)都由JSF包装在一个DataModel类中(或者,在一个子类中,如ArrayDataModel,CollectionDataModel,ListDataModel,ResultDataModel,ResultDataModel,或者ScalarDataModel)。JSF在呈现/解码表数据时将调用表DataModelclass'方法 我正在尝试构建Anghel Leonard的书中给出的一个示例—精通Java服务器Faces 2.2 这个bean很简单,如

每个集合(
List
HashMap
等等)都由JSF包装在一个
DataModel
类中(或者,在一个子类中,如
ArrayDataModel
CollectionDataModel
ListDataModel
ResultDataModel
ResultDataModel
,或者
ScalarDataModel
)。JSF在呈现/解码表数据时将调用表
DataModel
class'方法

我正在尝试构建Anghel Leonard的书中给出的一个示例—精通Java服务器Faces 2.2

这个bean很简单,如下所示:

@Named
@ViewScoped
public class PlayersBean implements Serializable {

    private HashSet<Players> dataHashSet = new HashSet<>();
    private SortDataModel<Players> sortDataModel;    
    final SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
    private String sortType = "asc";

    public PlayersBean() {
        try {
            dataHashSet.add(new Players(2, "NOVAK DJOKOVIC", (byte) 26, "Belgrade, Serbia", "Monte Carlo, Monaco", (short) 188, (byte) 80, "Boris Becker, Marian Vajda", sdf.parse("22.05.1987")));
            dataHashSet.add(new Players(1, "RAFAEL NADAL", (byte) 27, "Manacor, Mallorca, Spain", "Manacor, Mallorca, Spain", (short) 185, (byte) 85, "Toni Nadal", sdf.parse("03.06.1986")));
            dataHashSet.add(new Players(7, "TOMAS BERDYCH", (byte) 28, "Valasske Mezirici, Czech", "Monte Carlo, Monaco", (short) 196, (byte) 91, "Tomas Krupa", sdf.parse("17.09.1985")));
            dataHashSet.add(new Players(8, "STANISLAS WAWRINKA", (byte) 28, "Lausanne, Switzerland", "St. Barthelemy, Switzerland", (short) 183, (byte) 81, "Magnus Norman", sdf.parse("28.03.1985")));
            dataHashSet.add(new Players(4, "ANDY MURRAY", (byte) 26, "Dunblane, Scotland", "London, England", (short) 190, (byte) 84, "Ivan Lendl", sdf.parse("15.05.1987")));
            dataHashSet.add(new Players(5, "JUAN MARTIN DEL POTRO", (byte) 25, "Tandil, Argentina", "Tandil, Argentina", (short) 198, (byte) 97, "Franco Davin", sdf.parse("23.09.1988")));
            dataHashSet.add(new Players(10, "JO-WILFRIED TSONGA", (byte) 28, "Le Mans, France", "Gingins, Switzerland", (short) 188, (byte) 91, "Nicolas Escude & Thierry Ascione", sdf.parse("17.04.1985")));
            dataHashSet.add(new Players(6, "ROGER FEDERER", (byte) 32, "Basel, Switzerland", "Bottmingen, Switzerland", (short) 185, (byte) 85, "Stefan Edberg, Severin Luthi", sdf.parse("08.08.1981")));
            dataHashSet.add(new Players(9, "RICHARD GASQUET", (byte) 27, "Beziers, France", "Neuchatel, Switzerland", (short) 185, (byte) 75, "Sergi Bruguera and Sebastien", sdf.parse("18.06.1986")));
            dataHashSet.add(new Players(3, "DAVID FERRER", (byte) 31, "Javea, Spain", "Valencia, Spain", (short) 175, (byte) 73, "Jose Francisco Altur", sdf.parse("02.04.1982")));

            sortDataModel = new SortDataModel<Players>(new CollectionDataModel<Players>(dataHashSet));
        } catch (ParseException ex) {
            Logger.getLogger(PlayersBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public SortDataModel<Players> getSortDataModel() {
        return sortDataModel;
    }

    public String sortDataByRanking() {

        sortDataModel.sortThis(new Comparator<Players>() {
            @Override
            public int compare(Players key_1, Players key_2) {
                if (sortType.equals("asc")) {
                    return key_1.getRanking() - key_2.getRanking();
                } else {
                    return (-1) * (key_1.getRanking() - key_2.getRanking());
                }
            }
        });
        sortType = (sortType.equals("asc")) ? "dsc" : "asc";
        return null;
    }
}
调试后,我知道rows integer数组将由从0到要排序的集合大小(本例中为行)减1的整数填充

接下来,我看到他重写了
setRowIndex
方法来替换默认的行索引

触发GET请求会导致从中多次调用此被重写的方法

到0,1,2,3…。最后还是-1最后,

  • 这种方法的具体用途是什么?就是不明白作者的意思

  • 正如您所看到的,hashset是通过添加10项而初始化的。启动GET请求后,我只看到5项。为什么?

  • 获取:

    单击“排名”链接对其进行排序:

    帖子:

    为什么只有5张唱片

    我正在使用Glassfish应用服务器4.1.1,内部使用Mojarra 2.2.12

    查看

                 <h:dataTable value="#{playersBean.sortDataModel}" var="t" border="1">
                        <h:column>
                            <f:facet name="header">
                                <h:commandLink action="#{playersBean.sortDataByRanking()}">
                                    Ranking
                                </h:commandLink>                        
                            </f:facet>
                            #{t.ranking}
                        </h:column>.....
    
                ....
    
                 </h:dataTable>
    
    
    排名
    #{t.ranking}
    .....
    ....
    
                 <h:dataTable value="#{playersBean.sortDataModel}" var="t" border="1">
                        <h:column>
                            <f:facet name="header">
                                <h:commandLink action="#{playersBean.sortDataByRanking()}">
                                    Ranking
                                </h:commandLink>                        
                            </f:facet>
                            #{t.ranking}
                        </h:column>.....
    
                ....
    
                 </h:dataTable>