Я показываю таблицу данных из 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
.
Является ли это правильным способом передачи аргумента из XHTML-страницы, сгенерированной JSF, в метод управляющего компонента?
Есть ли лучший или более эффективный способ сделать это?
value="#{viewRecordBean.currentRecord(listedRecord.id) ? listedRecord.candidate : messages['table.header.record.archived']}"
. Вместо двух строк у вас есть только одна, и вы проверяете условие только один раз. - person Piotr Sagalara   schedule 12.04.2017