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

发布于 2025-01-08 12:28:27 字数 1832 浏览 0 评论 0原文

我正在显示来自 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 的方法的正确方法吗?

有没有更好或更有效的方法来做到这一点?

I am displaying a table of data from an sql query and want to render a section of code based on one of the field values from this sql query.

View: 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>

Controller: ViewListBean.java

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

The two rows of records.xhtml code in question are:

<h:outputText value="#{listedRecord.candidate}" rendered="#{viewRecordBean.currentRecord(listedRecord.id)}" />
<h:outputText value="#{messages['table.header.record.archived']}" rendered="#{!viewRecordBean.currentRecord(listedRecord.id)}" />

I want to be able to pass an argument within the rendered check and return a boolean to render or not. Let's say that there are 20 records returned in this sql query. If the recordId value of the current row is less than or equal to 10, it will return true and the listedRecord.dateAdded field will be displayed. Otherwise it will return false and the word Archived will be displayed.

Is this the correct way to pass an argument from a JSF generated XHTML page to the controlling bean's method?

Is there a better or more efficient way of doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故事与诗 2025-01-15 12:28:27

您只有一个错误:! 必须位于 EL 表达式内部。

即,这是无效的:

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

它应该是:

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

对于剩余部分,它看起来应该工作得很好,假设您的环境支持 EL 2.2。我只会使用 因为这样可以消除 HTML 样板。

You've only one mistake: the ! has to go inside the EL expression.

I.e. this is invalid:

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

it should be:

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

For the remnant it look as it should work just fine, assuming that your environment supports EL 2.2. I'd only use a <h:dataTable> as that eliminates HTML boilerplate.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文