Как передать аргумент методу из визуализированного h: outputText? - PullRequest
1 голос
/ 24 февраля 2012

Я отображаю таблицу данных из запроса 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 Ответ

1 голос
/ 24 февраля 2012

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

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

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

должно быть:

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

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

...