Как передать аргумент методу из визуализированного 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> </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.