EL条件方法表达式 [英] EL conditional Method Expression

查看:154
本文介绍了EL条件方法表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I would like to declare a conditional method expression in EL like below:

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

但是,它会引发EL异常:

However, it throws an EL exception:

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

javax.el.ELException: Not a Valid Method Expression: #{ cc.attrs.detailsMode == 'single' ? cc.attrs.bean.onRowSelect : cc.attrs.bean.onRowUrlSelect}

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

How I can declare a conditional EL method expression?

推荐答案

不幸的是,方法表达式不接受值表达式.最好的选择是拥有一个方法入口点,该入口点又基于detailsMode将其进一步委派给所需的操作方法,您也将该方法传递/设置给Bean.

Unfortunately, method expressions does not accept value expressions. Your best bet is to have a single method entry point which in turn delegates further to the desired action methods based on the detailsMode which you also pass/set to the bean.

例如

<h:dataTable ... rowSelectListener="#{cc.attrs.bean.onRowSelect}">

 public void onRowSelect(SelectEvent event) {  
     if ("single".equals(detailsMode)) {
         onRowSingleSelect(event);
     } else {
         onRowUrlSelect(event);
     }
 }

鉴于您实际上正在使用复合组件,因此可以根据需要将其隐藏在支持组件中,以减少支持bean中的样板:

Given that you're actually using a composite component, you can if necessary hide it away in the backing component to reduce boilerplate in backing 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 });
     }

}

这篇关于EL条件方法表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆