我有一个用户列表,我希望使用primeface p:datatable
在JSF页面中显示。我没有例外,但我无法显示列表中的数据,即使列标题未显示,实际上,我使用'getUserListe()'
方法从数据库中获取数据来调用我的服务层,为了确保这一点,我添加了一些userDomain
属性(我的模型类)的sysprint(),当我访问URL时,我想用UserListe中的数据填充我的数据表,所以我通过value="#{userMB.userListe}"
调用它,问题是列表没有显示。但是当页面被收费时,意味着调用了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, 谢谢你的帮助
答案 0 :(得分:0)
我在@luiggi的评论中通过<h:column>
更改了<p:column>
并且工作正常,所以谢谢。
我还将托管bean从@RequestScoped
更改为@ViewScoped
。
我想添加并与您分享的另一件事是,我在阅读了这篇文章的评论之后做了一些研究,所以我发现其他解决方案似乎比其他人更好地加载列表只有一次,它是通过将监听器附加到系统事件,所以在我的jsf文件中添加
<f:view>
<f:event type="preRenderView" listener="#{userMB.loadUserListe}" />
...
我的bean中的loadUserListe()
方法调用实例化用户列表的业务逻辑代码。
当然,jsf页面包含在f:视图中。另请注意,使用此侦听器至少需要JSF 2.0
谢谢大家的帮助,请原谅我的英语,我希望这个回复有助于其他人