【发布时间】:2012-07-30 08:48:48
【问题描述】:
我有一个用户列表,我想使用 primefaces p:datatable 在 JSF 页面中显示这些用户。我也不例外,但是我无法将a拥有的数据显示到列表中,甚至没有显示列标题,实际上我使用'getUserListe()'方法从调用我的服务层的数据库中获取数据,为了确定这一点,我添加了一些 userDomain 属性(我的模型类)的 sysprint(),当我访问 URL 时,我想用来自 UserListe 的数据填充我的数据表,所以我用 @ 调用它987654325@,问题是列表不显示。但是当页面被收费时,意味着 getUserListe() 被调用,在我的控制台中,属性被成功打印,有人对此有任何想法吗? :
我的托管 bean 的一部分:
@ManagedBean(name="userMB")
@RequestScoped
public class UserManagedBean implements Serializable {
private List<UserDomain> userListe ;
public List<UserDomain> getUserListe() {
this.userListe = new ArrayList<UserDomain>();
this.userListe.addAll(getUserServicee().getAll());
for(UserDomain u : userListe)
System.out.println(u.getFirstName());
return userListe;
}
public void setUserListe(List<UserDomain> userListe) {
this.userListe = userListe;
}
我的 jsf.xhtml 文件的一部分:
<h:form>
<h:outputText value="USER's rights list: "></h:outputText>
<p:dataTable id="userss" var="userr" value="#{userMB.userListe}" style="width: 10%">
<h:column>
<f:facet name="header"><h:outputText value="FirstName" /></f:facet>
<h:outputText value="#{userr.firstName}" />
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="LastName" /></f:facet>
<h:outputText value="#{userr.lastName}" />
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="Action" /></f:facet>
<h:commandLink value="Edit" action="#{userMB.editAction(userr)}" />
</h:column>
</p:dataTable>
<h:commandButton value="OK" action="#{userMB.userProp}" />
</h:form>
请注意,我的用户已正确设置其属性的所有 getter 和 setter, 谢谢你的帮助
【问题讨论】:
-
<h:column>与<h:dataTable>一起使用,将其更改为<p:column>。使您的 bean @ViewScoped 并将您的getUserListe的业务逻辑移动到另一个方法,为此请阅读 Between a jsf page and a managed bean, why the getter method is called twice -
Luiggi 说得对,使用 p:column 将修复它,您应该加载该数据一次,而不是每次请求该值。
-
谢谢@LuiggiMendoza 的回答,你是对的,Daniel,我怎样才能只加载一次数据,是通过“onload”preperty 还是什么?再次非常感谢您的帮助。
-
要仅加载一次列表,请在注解为@PostConstruct 的方法中加载列表,并将列表保存在UserManagedBean 的成员变量中。然后,在“getUserListe()”中,只返回变量。原因是页面渲染时JSF会多次调用“getUserListe()”。
-
@maouven 您可以创建一个检索数据的方法,并在 bean 构造函数和其他方法(如 commandButton 操作)中调用它来刷新数据。假设这是您的情况,最好让您的 bean ViewScoped,RequestScoped 将在每个请求(甚至是 ajax 请求!)中创建 bean。
标签: jsf jakarta-ee primefaces