EL 条件方法表达式

2023-12-11

我想在 EL 中声明一个条件方法表达式,如下所示:

<p:dataTable id="#{cc.attrs.datatableId}" var="overview" 
    rowSelectListener="#{cc.attrs.detailsMode == 'single' ? cc.attrs.bean.onRowSelect : cc.attrs.bean.onRowUrlSelect}">

但是,它会抛出 EL 异常:

javax.el.E​​LException:不是有效的方法表达式:#{ cc.attrs.detailsMode == 'single' ? cc.attrs.bean.onRowSelect : cc.attrs.bean.onRowUrlSelect}

如何声明条件 EL 方法表达式?


不幸的是,方法表达式不接受值表达式。最好的选择是拥有一个方法入口点,该入口点又根据detailsMode您也可以将其传递/设置为 bean。

E.g.

<h:dataTable ... rowSelectListener="#{cc.attrs.bean.onRowSelect}">
 public void onRowSelect(SelectEvent event) {  
     if ("single".equals(detailsMode)) {
         onRowSingleSelect(event);
     } else {
         onRowUrlSelect(event);
     }
 }

鉴于您实际上使用的是复合组件,如有必要,您可以将其隐藏在支持组件中,以减少支持 bean 中的样板代码:

<cc:interface componentType="yourComponent">
...
<h:dataTable ... rowSelectListener="#{cc.onRowSelect}">
@FacesComponent("yourComponent")
public class YourComponent extends UINamingContainer {

     public void onRowSelect(SelectEvent event) {  
        String methodName = "single".equals(detailsMode) ? "onRowSingleSelect" : "onRowUrlSelect";
        MethodExpression method = (MethodExpression) getAttributes().get(methodName);
        method.invoke(getFacesContext().getELContext(), new Object[] { event });
     }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EL 条件方法表达式 的相关文章

随机推荐

  • 指向作为静态成员的成员变量的指针

    这些天我正在摆弄一个数据模型的项目研究 该模型具有适合我的需求的反射 当我使用最新稳定版本的 g 进行第一项研究时 我在 Visual Studio 19 中失败了 太糟糕了 因为后者是我的主要平台 实际上 我尝试将指向成员变量的指针存储到
  • 图像的可点击区域 - 即使屏幕改变尺寸 html

    我正在尝试学习如何用 HTML 制作一个简单的网站 目前我已经创建了一个背景图像 该图像上有多个形状 我希望图像的不同部分成为可点击的链接 我了解如何查找坐标并使用图像映射 但是当我更改屏幕尺寸时 可单击的链接不起作用 如何使可点击区域适用
  • 从维基百科的某个部分中抓取表格

    我正在尝试想出一种可靠的方法来获取每个赛季 NFL 球队的最终排名 奇妙的是 有维基百科页面包含所有这些信息的链接 不幸的是 最终排名表的存储方式 位置存在很多不一致之处 考虑到联赛结构的演变 这也许是预料之中的 拯救恩典should相关表
  • `:_*`(冒号下划线星号)在 Scala 中做什么?

    我有以下一段代码这个问题 def addChild n Node newChild Node n match case Elem prefix label attribs scope child gt Elem prefix label a
  • Java swing gui 和 lwjgl

    一个简单的问题 是否可以在同一窗口中查看 java Swing 库的 gui 和 lwjgl 3D 场景 而无需使用任何其他 gui 库 如何 您可以使用 Display setParent java awt Canvas 方法将 LWJG
  • TOwnedCollection 和使用多个继承的 TCollectionItem

    我在添加自己的内容时遇到问题TCollectionItem类 继承自TCollectionItem 在同一个范围内TOwnedCollection 我提到了印地IdMessageParts pas for TIdMessagePart按照建
  • Cordova 6.0.0 更新后不断丢失存储空间

    我已经使用 Cordova cli 几年了 今天我从 Cordova 5 4 0 更新到 6 0 0 npm install g cordova latest 然后我将android平台从以前的版本更新到5 1 0 cordova plat
  • 使用 JComboBox(类别) 更改/更新 JTable 内容

    我的 JTable 有问题 我的 JTable 显示数据库的内容 一个数据库表具有名称类别 每个类别都显示在 JComboBox 中 如果我单击一个类别 它应该更新表格内容 这是我为您编写的一小段代码 因此可以更轻松地帮助我 代码应该可以运
  • JsonXContentGenerator 的 Elasticsearch 2.0 NoClassDefFoundError

    我正在尝试将我的elasticsearch java客户端api版本从1 4 2更新到2 0 0 我正在使用 java 1 8 我使用以下代码 XContentBuilder builder XContentFactory jsonBuil
  • MySQL 将表名传递给游标选择

    我希望程序接受参数答案表 and partid在选择语句中 但是当我调用它时 它不会用值替换参数answertable 电话call updateTotalScores quiz participation quiz answer 1 返回
  • Android 动态创建按钮并填充布局

    我正在动态创建一个按钮 按钮的数量取决于数组列表的大小 问题是 创建按钮后 我将使用 addview 方法添加到布局中 问题是我使用线性布局 因为默认情况下线性布局的方向是水平的 因此按钮将水平填充布局 因此 有些按钮是不可见的 我想要实现
  • 通过代理重定向 Angular2 http 请求

    我正在使用创建 Angular2 应用程序角度 cli引导程序和使用webpack dev server用于调试目的 对于某些类型的 http 请求 我想使用 webpack dev server 将它们重定向到另一个后端代理支持 为此我创
  • 在函数内使用 jags.parallel (R 语言 get(name, envir = envir) 中的错误:未找到对象 'y')

    从命令行或脚本使用 jags parallel 效果很好 我可以运行这个修改后的示例http www inside r org packages cran R2jags docs jags正好 An example model file i
  • Mongo Json 架构验证器 AnyOf 不起作用

    我创建了一个具有以下验证的集合 jsonSchema bsonType object additionalProperties false properties id bsonType objectId test bsonType stri
  • 如何从 ASP.NET 后台代码访问 HTML 表单输入

    我有一个基本的 HTML 表单 可以插入到服务器端div基于数据库中存在多少记录的标记 这个 HTML 表单效果很好 一切看起来都很好 但在我的操作页面上 我似乎无法从后面的代码访问输入元素 我尝试过使用Request范围 但我对这种方法一
  • linux下删除带反斜杠的文件

    我不小心创建了一个名称是反斜杠的文件 gt ls l total 0 rw rw 1 user group 0 Jul 3 21 34 我该如何删除它 为了将参数中的反斜杠传递给命令 您需要 引用 或 转义 它 您可以通过用单引号括起来来实
  • 追加到上一行以进行匹配

    我可以用吗sed or awk如果找到匹配项 则追加到上一行 我有一个格式如下的文件 INT32 FSHL const TP Buffer INT32 FSHL lm const TP Buffer WORD32 ugo 0 我想做的是扫描
  • Scapy 和 tcpreplay:绕过临时文件以提高性能

    Scapy 有一个sendpfast使用 tcpreplay 发送数据包的函数 但是 该函数首先创建一个临时 pcap 文件 然后对其调用 tcpreplay 这增加了太多的延迟 有没有办法绕过它并直接将数据发送到 tcpreplay 我知
  • Java 中的资源、URI、URL、路径和文件有什么区别?

    我现在正在查看一段 Java 代码 它采用字符串形式的路径并使用URL resource ClassLoader getSystemClassLoader getResource pathAsString 然后调用String path r
  • EL 条件方法表达式

    我想在 EL 中声明一个条件方法表达式 如下所示