yra*_*lik 2 database session jsf
我有两段代码基本上做同样的事情.我用两种不同的方式填充数据表.他们是:
<h:dataTable binding="#{currentUser.ITEMS}" style=" width:505px;" id="userTable" value="#{currentUser.items}" var="user" >
<h:column>
</h:column>
<h:column>
<f:facet name="header">Account Number</f:facet>
#{user.name}
</h:column>
<h:column>
<f:facet name="header">Currency</f:facet>
#{user.surname}
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
其中items是包含用户项的数组,其中currentUser是User类型的会话范围类对象.在第一个代码中,当用户登录时,我从数据库中获取所有项目,并将它们添加到会话以供稍后使用,因为我以这种方式填充表格.现在第二个版本:
<h:dataTable binding="#{user.ITEMS}" style=" width:505px;" id="userTable" value="#{user.items}" var="user" >
<h:column>
</h:column>
<h:column>
<f:facet name="header">Account Number</f:facet>
#{user.name}
</h:column>
<h:column>
<f:facet name="header">Currency</f:facet>
#{user.surname}
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
在第二个示例中,当用户登录到系统时,我不保留项目列表,但是每当要填充表格时,我都会执行数据库查询并按用户的项目填充表格.
所以我的问题是,哪种方式更好?我看到,在第一种情况下,使用大量会话对象可能是有害的,但在第二种情况下,每次我们需要项目信息时,我们都会进行数据库搜索.那么我们可以说在空间,时间等方面,一种方式比另一种方式更好?
在会话范围对象中缓存数据会冒着提供过时数据的风险 - 如果另一个进程修改了数据库的内容,则会话范围对象将不会反映这些更改.听起来这不是可变数据,在这种情况下,这不是问题.
除此之外,在会话范围对象中缓存数据在时间方面可能更好,因为数据保存在主存储器中,并且每次进入数据库在空间方面可能更好,因为您没有保留数据记忆."may"限定符存在,因为数据库可能正在为您缓存此数据.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |