我是 Primifaces 和 JSF 框架的新手 我正在使用 PRimefaces 5、JSF 2、Spring 4 和 Hibernate 5
我面临的问题是,当向 dataTable 添加按钮时,休眠请求的数量会增加(冗余请求)。
这是我的 xthml 页面:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<p:outputLabel value="Boitiers"/>
<h:form prependId="false">
<p:dataTable var="box" value="#{boxListView.boxList}" lazy="true" paginator="true" rows="20">
<p:column headerText="Box Id">
<h:outputText value="#{box.id}" />
</p:column>
<p:column headerText="Name">
<h:outputText value="#{box.name}" />
</p:column>
<p:column headerText="MAC">
<h:outputText value="#{box.mac}" />
</p:column>
<p:column headerText="Ip Externe">
<h:outputText value="#{box.ipExt}" />
</p:column>
<p:column headerText="IPv4">
<h:outputText value="#{box.ipv4}" />
</p:column>
<p:column headerText="IPv6">
<h:outputText value="#{box.ipv6}" />
</p:column>
<p:column headerText="Version">
<h:outputText value="#{box.version}" />
</p:column>
<p:column headerText="MAJ">
<h:outputText value="#{box.maj}" />
</p:column>
<p:column headerText="Current Version">
<h:outputText value="#{box.currentVersion}" />
</p:column>
<p:column headerText="Users">
<p:commandButton value="Details" update="@([id$=display])" oncomplete="PF('userDialog').show()" icon="ui-icon-extlink" >
<f:setPropertyActionListener value="#{box}" target="#{boxListView.selectedBox}" />
</p:commandButton>
</p:column>
</p:dataTable>
<!-- rendered="#{not empty boxListView.selectedBox}" -->
<p:dialog header="Users for box ID:" widgetVar="userDialog" resizable="false" minHeight="40" modal="true">
<p:outputPanel id="display" style="text-align:center;">
<p:dataTable var="user" value="#{boxListView.userBoxList}" tableStyle="width:auto" lazy="true">
<p:column>
<f:facet name="header">
<h:outputText value="User Id" />
</f:facet>
<h:outputText value="#{user.id}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nom" />
</f:facet>
<h:outputText value="#{user.nom}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Prenom" />
</f:facet>
<h:outputText value="#{user.prenom}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="email" />
</f:facet>
<h:outputText value="#{user.email}" />
</p:column>
</p:dataTable>
</p:outputPanel>
</p:dialog>
</h:form>
</h:body>
我的 ManagedBean 类:
@SuppressWarnings("serial")
@ManagedBean
//@ViewAccessScoped
public class BoxListView extends LazyDataModel<Box> implements Serializable
{
@ManagedProperty(value = "#{boxService}")
private IBoxService boxService;
private Box selectedBox;
List<User> users = new ArrayList<User>();
public IBoxService getBoxService() {
return boxService;
}
public void setBoxService(IBoxService boxService) {
this.boxService = boxService;
}
public Box getSelectedBox() {
return selectedBox;
}
public void setSelectedBox(Box selectedBox)
{
this.selectedBox = selectedBox;
if(this.selectedBox == null)
return ;
boxService.initializeLazy(selectedBox.getBoxUsers());
Set<BoxUser> userbox = selectedBox.getBoxUsers();
if(userbox != null)
{
for (BoxUser boxUser : userbox)
{
users.add(boxUser.getUser());
}
}
}
public List<Box> getboxList()
{
if(boxService == null)
return null;
return boxService.findAll();
}
public List<User> getUserBoxList()
{
return users;
}
}
这里的日志输出:
INFO: Server startup in 48378 ms
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'boxService'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'transactionManager'
<==========================================================>
<--- Here i am loading the page the retrieve all my box ----->
<--- We can see that 2 same request are sent ----->
<--- This problem doesn't occurred if I remove the button from the datatable ----->
<==========================================================>
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'sessionFactory'
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'boxService'
<==========================================================>
<--- Here i am clicking the button ----->
<==========================================================>
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
boxusers0_.idbox as idbox2_0_0_,
boxusers0_.id as id1_1_0_,
boxusers0_.id as id1_1_1_,
boxusers0_.idbox as idbox2_1_1_,
boxusers0_.iduser as iduser3_1_1_,
user1_.id as id1_22_2_,
user1_.code_postal as code_pos2_22_2_,
user1_.email as email3_22_2_,
user1_.nom as nom4_22_2_,
user1_.pass as pass5_22_2_,
user1_.prenom as prenom6_22_2_,
user1_.role as role7_22_2_,
user1_.telephone as telephon8_22_2_
from
box_user boxusers0_
left outer join
users user1_
on boxusers0_.iduser=user1_.id
where
boxusers0_.idbox=?
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
在加载所选行以显示对话框之前,数据表正在多次输入方法 getboxList()。
我希望每个操作只看到一个请求
加载页面时:
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
并单击按钮时:
Hibernate:
select
this_.id as id1_0_1_,
this_.current_version as current_2_0_1_,
this_.idtest as idtest3_0_1_,
this_.ip_ext as ip_ext4_0_1_,
this_.ipv4 as ipv5_0_1_,
this_.ipv6 as ipv6_0_1_,
this_.last_conf_changed as last_con7_0_1_,
this_.last_connection as last_con8_0_1_,
this_.mac as mac9_0_1_,
this_.idmaj as idmaj15_0_1_,
this_.name as name10_0_1_,
this_.plcbus as plcbus11_0_1_,
this_.reinit as reinit12_0_1_,
this_.triphase as triphas13_0_1_,
this_.version as version14_0_1_,
maj2_.id as id1_8_0_,
maj2_.active as active2_8_0_,
maj2_.date as date3_8_0_,
maj2_.descriptif as descript4_8_0_,
maj2_.nom as nom5_8_0_,
maj2_.stable as stable6_8_0_
from
box this_
left outer join
maj maj2_
on this_.idmaj=maj2_.id
我错过了什么?
感谢您的帮助和您的时间!