Jsf ui:重复大小不为';t获取javabean值
JSF2.0的ui:repeat标记获取JavaBean(arraylist)的值作为其值属性,但size属性没有。我在一个datatable中使用ui repeat,它迭代显示状态,ui repeat显示每个状态的注释。我给出了java类中ui repeat的size属性,因为每个状态都有不同数量的注释。因此,应动态确定尺寸。这是我所做工作的总结。模型类:Jsf ui:重复大小不为';t获取javabean值,jsf,jsf-2,primefaces,datatable,uirepeat,Jsf,Jsf 2,Primefaces,Datatable,Uirepeat,JSF2.0的ui:repeat标记获取JavaBean(arraylist)的值作为其值属性,但size属性没有。我在一个datatable中使用ui repeat,它迭代显示状态,ui repeat显示每个状态的注释。我给出了java类中ui repeat的size属性,因为每个状态都有不同数量的注释。因此,应动态确定尺寸。这是我所做工作的总结。模型类: @ManagedBean @RequestScoped public class Comment { private Strin
@ManagedBean
@RequestScoped
public class Comment {
private String commentAuthorName;
//getter and setter
}
这表示具有注释列表的状态类:
@ManagedBean
@RequestScoped
public class Status {
private ArrayList<Comment> commentList;
private int numOfComments;
//getter and setter
}
@ManagedBean
@请求范围
公共阶级地位{
私有ArrayList注释列表;
私人评论;
//接二连三
}
这是关于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);
}
}
}
}
@ManagedBean
@会议范围
公共类StatusBean{
List panelList=new ArrayList();
List commentList=新的ArrayList();
公共静态无效进程(){
panelList=StatusService.getPersonalStatus(log.getLoggeduser());//表示填充列表
commentList=StatusService.getPersonalComments(panelList);//通过相关状态获取注释
对于(inti=0;i,据我所知,到今天为止还没有答案,所以我将回答您的问题,并给您一些关于我肯定会在您的堆栈中更改什么的想法
分析你的问题
我已经编写了一个类似于您的代码,关于使用托管bean属性指定的
大小属性来使用
,它对我也不起作用。无论我多么努力地用EL设置属性的值,它都不起作用。此外,对于最简单的EL,它也不起作用,比如{5}
也是。我不知道问题是从哪里来的,但我认为这里的经验会告诉我们为什么会发生这种情况,好吗
很可能这是JSF
组件的一个小故障,那么我们将提出一个与之相关的问题。如果这是一个特性,那么最好完全理解它
据我所知,这是一个代码的工作示例
关于上面的代码,有许多简单的解决方法。如果您坚持使用
组件,我将为您提供基本的工作示例。您的视图层由一个JSF托管bean和两个模型类支持。我的解决方案使用
和
。现在开始
观点:
<p:dataTable value="#{statusBean.statusesList}" var="status">
<p:column headerText="Status name">
<h:outputText value="#{status.statusName}"/>
</p:column>
<p:column headerText="Status comments">
<ul>
<ui:param name="max" value="#{status.numOfComments}"/>
<ui:repeat var="comment" value="#{status.commentList}" varStatus="statusVar">
<ui:fragment rendered="#{statusVar.index lt max}">
<li>
<h:outputText value="Author: #{comment.authorName}; comment: #{comment.description}"/>
</li>
</ui:fragment>
</ui:repeat>
</ul>
</p:column>
</p:dataTable>
与
据我所知,直到今天还没有答案,所以我会回答你的问题,并给你一些想法,我肯定会改变你的堆栈
分析你的问题
我已经编写了一个类似于您的代码,关于使用托管bean属性指定的
大小属性来使用
,它对我也不起作用。无论我多么努力地用EL设置属性的值,它都不起作用。此外,对于最简单的EL,它也不起作用,比如{5}
也是。我不知道问题是从哪里来的,但我认为这里的经验会告诉我们为什么会发生这种情况,好吗
很可能这是JSF
组件的一个小故障,那么我们将提出一个与之相关的问题。如果这是一个特性,那么最好完全理解它
据我所知,这是一个代码的工作示例
关于上面的代码,有许多简单的解决方法。如果您坚持使用
组件,我将为您提供基本的工作示例。您的视图层由一个JSF托管bean和两个模型类支持。我的解决方案使用
和
。现在开始
观点:
<p:dataTable value="#{statusBean.statusesList}" var="status">
<p:column headerText="Status name">
<h:outputText value="#{status.statusName}"/>
</p:column>
<p:column headerText="Status comments">
<ul>
<ui:param name="max" value="#{status.numOfComments}"/>
<ui:repeat var="comment" value="#{status.commentList}" varStatus="statusVar">
<ui:fragment rendered="#{statusVar.index lt max}">
<li>
<h:outputText value="Author: #{comment.authorName}; comment: #{comment.description}"/>
</li>
</ui:fragment>
</ui:repeat>
</ul>
</p:column>
</p:dataTable>
与
如果您想获得具体帮助,请发布您的代码的sscce,否则没有人能够或想要回答您的问题。作为补充说明,您的代码显示了对Java命名约定的一些不尊重,这可能会使一些读者拒绝回答。感谢您对学员的有用评论。我更新了我的问题,因为您r建议顺便说一句,我今天感觉不太好,为错误感到抱歉。我不理解您希望通过
内部
实现什么。您还有其他PrimeFaces组件可以帮助您喜欢和。我的意思是,每个状态元素都已经包含注释列表,并且它们是实体类或DTO,而不是托管bean(具有请求作用域)。其次,会话范围bean的静态方法是一个非常糟糕的主意。最好是在构造后方法或页面操作方法中填充值。此外,第二个列表的迭代是多余的,因为在comment对象上没有方法调用。请查看答案并享受JSF的“隐藏”功能!如果您想获得concrete help请发布您的代码的sscce,否则没有人能够或想要回答您的问题。顺便说一句,您的代码显示了对Java命名约定的一些不尊重,这可能会使一些读者拒绝回答。感谢您对学员的有用评论。由于您的建议,我更新了我的问题。顺便说一句,我不知道今天感觉很好,为错误感到抱歉。我不理解您希望通过
内部的
实现什么。您还有其他PrimeFaces组件可以帮助您喜欢和。我的意思是每个状态元素已经包含注释列表,它们是实体类或DTO,而不是托管bean(具有请求作用域)。接下来,会话范围bean的静态方法是一个非常糟糕的主意。最好是在构造后方法或页面操作方法中填充值。此外,第二个列表的迭代是多余的,因为在注释对象上没有方法调用。看看答案,享受JSF的“隐藏”功能!哇!这一定是最好的这个问题可以回答!!!我只是执行了你的代码并按照我想要的方式工作。当然,我会试着考虑你的戒律。
public class Comment {
private String authorName;
private String description;
}
public class Status {
private List<Comment> commentList;
private int numOfComments;
private String statusName;
}
@ManagedBean
@RequestScoped
public class StatusBean {
private List<Status> statusesList;
public StatusBean() {
Status status;
List<Status> statusesList = new ArrayList<Status>();
Comment comment;
List<Comment> commentList;
for(int s = 0; s < 10; s++) {
commentList = new ArrayList<Comment>();
for(int c = 0; c < 20; c++) {
commentList.add(new Comment("User " + (s + 1) + "-" + (c + 1), "Description for comment " + (s + 1) + "-" + (c + 1)));
}
statusesList.add(new Status(commentList, (s + 1), "Status " + (s + 1)));
}
this.statusesList = statusesList;
}
}
@ManagedBean
@RequestScoped
public class StatusBean {
private List<Status> statusesList;
@EJB
private StatusService statusService;
@ManagedProperty(value="#{user}")
private User user;
@PostConstruct
public void init() {
statusesList = statusService.getStatuses(user);
}
public List<Status> getStatusesList() {
return statusesList;
}
}