避免 JSF 中的冗余数据库查询并有条件地呈现 ui:repeat
我在我的应用程序中使用 JSF 和 Hibernate。假设我有一个用户帐户,我想使用
在
无序列表中显示其问题。如果没有问题,我不想呈现列表,而是显示“没有问题”文本。我目前的处理方式如下:<ul>
<ui:repeat value="#{user.questions}" var="question">
<li>#{question.text}</li>
</ui:repeat>
</ul>
<h:outputText rendered=#{user.questions.size() == 0}">no questions</h:outputText>
这有两个问题,如果没有问题的话,会出现杂散的
标签。我是否应该将其封装在另一个面板中再次 rendered=#{user.questions.size() > 0}
因为 ui:repeat
似乎不接受渲染的属性。
第二个问题是 user.questions.size() 被计算了两次(并且 user.questions 在两个不同的地方访问),这是否意味着相同的两次点击数据库中的变量?
I am using JSF and Hibernate in my application. Say I have a user account, whose questions I want to display using <ui:repeat>
, in a <ul>
unordered list. I don't want to render the list if there are no questions, and display "No questions" text instead. The way I currently account is the following:
<ul>
<ui:repeat value="#{user.questions}" var="question">
<li>#{question.text}</li>
</ui:repeat>
</ul>
<h:outputText rendered=#{user.questions.size() == 0}">no questions</h:outputText>
There are two problems with this, the stray <ul>
tags if there are no questions.
Should I encapsulate it in another panel with again rendered=#{user.questions.size() > 0}
because it seems ui:repeat
does not accept rendered property.
The second problem is that user.questions.size()
is calculated twice (and user.questions
is accessed in two different places), does that mean two hits for the same variable in db?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的。
应通过适当地确定范围和缓存数据来在模型中处理此类行为。
Yes.
Such behaviour should be handled in your model by appropriately scoping and caching the data.