Избегание избыточных запросов к БД в JSF и условное отображение пользовательского интерфейса: repeat - PullRequest
0 голосов
/ 21 октября 2011

Я использую JSF и Hibernate в своем приложении.Скажем, у меня есть учетная запись пользователя, чьи вопросы я хочу отобразить, используя <ui:repeat>, в неупорядоченном списке <ul>.Я не хочу отображать список, если нет вопросов, и отображать текст «Нет вопросов».В настоящее время я веду учетную запись следующим образом:

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

С этим связаны две проблемы: блуждающие теги <ul>, если нет вопросов.

Должен ли я инкапсулировать их в другую панельс снова rendered=#{user.questions.size() > 0}, поскольку кажется, что ui:repeat не принимает отображаемое свойство.

Вторая проблема состоит в том, что user.questions.size() вычисляется дважды (и к user.questions обращаются в двух разных местах), означает ли этодва попадания для одной и той же переменной в БД?

1 Ответ

1 голос
/ 21 октября 2011

Должен ли я инкапсулировать его в другую панель снова с rendered=#{user.questions.size() > 0}, потому что кажется, ui:repeat не принимает визуализированное свойство.

Да.

Вторая проблема заключается в том, что 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...