如何从渲染的h:outputText传递参数给方法?

时间:2012-02-24 18:31:06

标签: java jsf richfaces el ajax4jsf

我正在显示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>

Controller:ViewListBean.java

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

有问题的两行record.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页面传递给控制bean的方法的正确方法吗?

有更好或更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

你只有一个错误:!必须进入EL表达式。

即。这是无效的:

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

它应该是:

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

对于剩余部分,它看起来应该可以正常工作,假设您的环境支持EL 2.2。我只使用<h:dataTable>,因为它消除了HTML样板。