Как передать аргумент методу из визуализированного h:outputText?

Я отображаю таблицу данных из запроса SQL и хочу визуализировать часть кода на основе одного из значений поля из этого запроса SQL.

Вид: records.xthml

<table>
  <thead>
    <tr>
      <td>#{messages['table.header.id']}</td>
      <td>#{messages['table.header.name']}</td>
      <td>#{messages['table.header.date.added']}</td>
      <td>&nbsp;</td>
    </tr>
  </thead>
  <tbody>
    <a4j:repeat value="recordListBean.records" var="listedRecord" rowKeyVar="index">
      <tr>
        <td><h:outputText value="#{listedRecord.id}</td>
        <td><h:outputText value="#{listedRecord.name}</td>
        <td>
          <h:outputText value="#{listedRecord.dateAdded}" rendered="#{viewRecordBean.currentRecord(listedRecord.id)}" />
          <h:outputText value="#{messages['table.header.record.archived']}" rendered="!#{viewRecordBean.currentRecord(listedRecord.id)}" />
        </td>
      </tr>
    </a4j:repeat>
  </tbody>
</table>

Контроллер: ViewListBean.java

public boolean currentRecord(Long recordId) {
  Long maxRecordId = 10;
  if (recordId <= maxRecordId) {
    return true;
  } else {
    return false;
  }
}

Две строки рассматриваемого кода records.xhtml:

<h:outputText value="#{listedRecord.candidate}" rendered="#{viewRecordBean.currentRecord(listedRecord.id)}" />
<h:outputText value="#{messages['table.header.record.archived']}" rendered="#{!viewRecordBean.currentRecord(listedRecord.id)}" />

Я хочу иметь возможность передать аргумент в проверке и вернуть логическое значение для визуализации или нет. Скажем, в этом SQL-запросе возвращено 20 записей. Если recordId значение текущей строки меньше или равно 10, оно вернет true и listedRecord.dateAdded поле будет отображаться. В противном случае он вернет false и слово Archived будет отображаться.

Это правильный способ передачи аргумента из сгенерированной JSF страницы XHTML в метод управляющего компонента?

Есть ли лучший или более эффективный способ сделать это?

1 ответ

Решение

У вас есть только одна ошибка: ! должен идти внутри выражения EL.

Т.е. это неверно:

rendered="!#{viewRecordBean.currentRecord(listedRecord.id)}" 

так должно быть:

rendered="#{!viewRecordBean.currentRecord(listedRecord.id)}" 

Для остатка это выглядит так, как будто оно должно работать просто отлично, при условии, что ваша среда поддерживает EL 2.2. Я бы использовал только <h:dataTable> как это устраняет шаблон HTML.

Другие вопросы по тегам