Jsf DataTable.rowIndex始终返回0

Jsf DataTable.rowIndex始终返回0,jsf,datatable,jsf-2.2,Jsf,Datatable,Jsf 2.2,我做得不对的是什么 @Named("utilityController") @RequestScoped public class UtilityController { public DataModel<Result> getResultSample() { Result[] resultSample = new Result[11]; //Populate the array return new ArrayDataMode

我做得不对的是什么

@Named("utilityController")
@RequestScoped
public class UtilityController {
    public DataModel<Result> getResultSample() {
        Result[] resultSample = new Result[11];
        //Populate the array
        return new ArrayDataModel<>(resultSample);
    }
}
@Named(“实用控制器”)
@请求范围
公共类实用控制器{
公共数据模型getResultSample(){
结果[]结果示例=新结果[11];
//填充数组
返回新的ArrayDataModel(ResultsSample);
}
}
在JSF中:

<h:dataTable id="sampleResult" value="#{utilityController.resultSample}" var="item" styleClass="table table-bordered table-striped table-hover table-condensed" >
    <h:column>
        <f:facet name="header">SN</f:facet>
        #{utilityController.resultSample.rowIndex}
    </h:column>
    <h:column>
        <f:facet name="header">Subject</f:facet>
        #{item.subject.name}
    </h:column>
    ....
</h:dataTable>

锡
#{utilityController.ResultsSample.rowIndex}
主题
#{item.subject.name}
....

正如上面所示,rowIndex始终返回0。请帮我指出我做错了什么

我做得不对的是什么

在getter方法中创建模型。永远不要那样做。所有getter方法应如下所示:

public DataModel<Result> getResultSample() {
    return resultSample;
}
至于您的具体功能需求,您也可以只参考而不将值包装在
数据模型中

public Result[] getResults() { // Consider List<Result> instead.
    return results;
}
<代码>公共结果[] GETRESULTS(){//RealStlist,取而代之。 返回结果; }

#{table.rowIndex+1}
#{result.subject.name}
注意,我用1增加了它,因为它是基于0的,而人类期望的是基于1的索引

另见:

谢谢@BalusC,你的第二个建议似乎很完美,我正在查看链接,并将很快回复。这与绑定方法配合得非常好。但是,请问@BalusC桌子对象来自哪里?我没有在任何地方定义它,但是它有rowIndex,它可能有什么其他属性?在我的javadoc答案中单击
UIData
链接。所有
getXxx()
方法也可以通过这种方式使用。我还添加了第三个“参见”链接,解释了
binding
属性。再次感谢@BalusC,这些链接非常有用
public Result[] getResults() { // Consider List<Result> instead.
    return results;
}