JSF 2.0 的 ui:repeat 标记获取 java bean(arraylist) 的值,因为它是 value 属性,但 size 属性没有。我在数据表中使用 ui repeat 迭代地显示状态,ui repeat 显示每个状态的注释。我从 java 类中给出了 ui repeat 的 size 属性,因为每个状态都有不同数量的注释。因此大小应该动态决定。这是我所做的总结。模型类:
@ManagedBean
@RequestScoped
public class Comment {
private String commentAuthorName;
//getter and setter
}
这表示具有注释列表的 Status 类:
@ManagedBean
@RequestScoped
public class Status {
private ArrayList<Comment> commentList;
private int numOfComments;
//getter and setter
}
这是关于 StatusBean 类的一个想法:
@ManagedBean
@SessionScoped
public class StatusBean {
List<Status> panelList = new ArrayList<Status>();
List<Comment> commentList = new ArrayList<Comment>();
public static void process() {
panelList = StatusService.getPersonalStatus(log.getLoggeduser());//means fill list
commentList = StatusService.getPersonalComments(panelList);//gets comments via related statuses
for (int i=0; i<panelList.size(); i++) { //for each status
Status status = panelList.get(i);
for(Comment comment : commentList) { //for each comment of each status
status.setNumOfCommentsShown(1);
}
}
}
}
视图层如下所示。PrimeFaces DataTable 中包含的 UI 重复能够显示每个状态的每个评论。我正在使用数据表,因为它具有实时滚动功能,并且必须迭代地显示所有状态,并且 ui repeat 看起来最好显示每个状态的每个评论。
<p:dataTable liveScroll="true" value="#{StatusBean.panelList}"
var="Status" scrollable="true">
<ui:repeat var="Comment" value="#{Status.commentList}"
size="#{Status.numOfComments}"></ui:repeat>
</p:dataTable>
调试结果显示 #{Status.numOfComments} 正确填充了预期的整数,但仍然无法正常工作。但是如果我手动编写 size=3 ,它会给出预期的结果。