【问题标题】:How to pass an argument to method from rendered h:outputText?如何将参数从渲染的 h:outputText 传递给方法?
【发布时间】:2012-03-15 05:14:17
【问题描述】:

我正在显示来自 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 页面传递给控制 bean 的方法的正确方法吗?

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

【问题讨论】:

  • 如果我是你,我会这样做:value="#{viewRecordBean.currentRecord(listedRecord.id) ? listedRecord.candidate : messages['table.header.record.archived']}" 。而不是两行,你只有一个,你只检查一次条件。

标签: java jsf richfaces el ajax4jsf


【解决方案1】:

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

即这是无效的:

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

应该是:

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

假设您的环境支持 EL 2.2,它看起来应该可以正常工作。我只会使用&lt;h:dataTable&gt;,因为它消除了 HTML 样板。

【讨论】:

  • 感谢您的快速响应!!我是 JSF/Java/EL 等的新手。如何判断我的堆栈支持哪些 EL?
  • 取决于服务器和 web.xml 版本。另见stackoverflow.com/questions/5273729/…
  • 看来我正在使用 jboss-el-2.0.1。与莫哈拉。
  • 现在,我需要保留 HTML 样板,所以我仍然需要使用 a4j:repeat 选项。当我这样做时,listedRecord.id 拒绝通过 viewRecordBean.currentRecord(listedRecord.id) 方法,除了 null。我不确定如何获得实际价值。
  • 我的错误......这实际上是有效的。我现在已经能够验证参数值实际上是否正确传递。再次感谢您的帮助!
猜你喜欢
  • 2012-01-14
  • 2016-10-03
  • 2011-11-11
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
相关资源
最近更新 更多