Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免JSF中的冗余DB查询并有条件地呈现ui:repeat_Jsf - Fatal编程技术网

避免JSF中的冗余DB查询并有条件地呈现ui:repeat

避免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

我在应用程序中使用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
不接受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标记它。