可重复使用的 actionListener 属性 - 避免空值 - 设置操作的非法语法

Reusable actionListener attribute - avoid null value - Illegal Syntax for Set Operation

我正在看这个 answer or this answer,它描述了如何使 actionListener 例如在 facelets 的情况下可重复使用:

<my:tag ... bean="#{myBean}" actionMethod="preFillData" />

...

<h:commandButton ... action="#{bean[actionMethod]}" />

很好。问题是我很困惑,如果值是 null 怎么办? 类似这样的东西,但我不确定它是否适用于 jsf 语法(请参阅下一个片段) :

未测试

<h:commandButton ... action="#{(bean==null||actionMethod==null?myBeanB[myMethodB]:bean[actionMethod])}" />

alike 表达式导致 Illegal Syntax for Set Operation 抛出异常...所以我不确定语法:(*

所以我的问题是...如何分析属性在客户端有值?

我尝试将 if...else 用作:

<c:if test="#{bean!=null and actionMethod!=null}">
    <c:set var="variableAction" value="#{bean[actionMethod]}"/>
    </c:if>
    <c:if test="#{bean==null or actionMethod==null}">
    <c:set var="variableAction" value="#{somedefaultbean.method}"/>
    </c:if>

...

<h:commandButton ... actionListener="#{variableAction}" />

p.s.The 解决方案运行良好,但我仍在寻找更短的解决方案,因此请随时添加评论和有用的提示:)

干杯