避免JSF中的冗余DB查询并有条件地呈现ui:repeat
我在应用程序中使用JSF和Hibernate。假设我有一个用户帐户,我想使用避免JSF中的冗余DB查询并有条件地呈现ui:repeat,jsf,Jsf,我在应用程序中使用JSF和Hibernate。假设我有一个用户帐户,我想使用在无序列表中显示其问题。如果没有问题,我不想呈现列表,而是显示“没有问题”文本。我目前的账户方式如下: <ul> <ui:repeat value="#{user.questions}" var="question"> <li>#{question.text}</li> </ui:repeat> </ul> <h:outputText
在
无序列表中显示其问题。如果没有问题,我不想呈现列表,而是显示“没有问题”文本。我目前的账户方式如下:
<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
不接受rendered属性
对
第二个问题是user.questions.size()
计算了两次(并且user.questions
在两个不同的位置访问),这是否意味着对同一个变量在db中进行了两次点击
这种行为应该在模型中通过适当地限定和缓存数据来处理
@ManagedBean @RequestScoped
public class DemoBean {
private List<Question> questions;
public List<Question> getQuestions() {
if(questions == null) {
questions = lookupQuestions();
}
return questions;
}
// etc.
@ManagedBean@RequestScoped
公共类DemoBean{
私人名单问题;
公共列表问题(){
如果(问题==null){
问题=查找问题();
}
回答问题;
}
//等等。
谢谢,我正在获取用户信息。通过Hibernate的DAO询问数据。你知道Hibernate是否缓存该数据(与二级缓存相关),或者我应该按照你的建议编写一个包装器吗?@ustun-我会问一个新问题,详细说明你如何使用/如何配置DAO并用Hibernate标记它。