我有一个模板,是表单的一部分,用于编辑某些元素。根据包含它的页面不同,执行的操作也不同。因此,我将action方法作为参数传递:
<ui:param name="option" value="#{someOptionBean}" />
...
<ui:include src="/WEB-INF/jsf/value-edit.xhtml">
<ui:param name="controllerParam" value="#{optionController}" />
<ui:param name="elementParam" value="#{option}" />
<ui:param name="actionParam" value="updateOption" />
</ui:include>
或者:
<ui:param name="property" value="#{somePropertyBean}" />
...
<ui:include src="/WEB-INF/jsf/value-edit.xhtml">
<ui:param name="controllerParam" value="#{propertyController}" />
<ui:param name="elementParam" value="#{property}" />
<ui:param name="actionParam" value="updateProperty" />
</ui:include>
在 value-edit.xhtml
中有一个命令按钮:
<p:commandButton value="Update" action="#{controllerParam[actionParam](elementParam)}" />
目前一切工作正常。
我的问题是现在动作方法的参数数量不同。它们是:
public void updateOption(Option option) { ... }
public void updateProperty(Item item, Prop property) { ... }
现在我希望还能定义操作参数,例如:
<ui:param name="actionParam" value="updateOption(option)" />
<ui:param name="actionParam" value="updateProperty(item, property)" />
或类似于:
<ui:param name="method" value="updateProperty" />
<ui:param name="parameters" value="item, property" />
我已经阅读了文档(值和方法表达式/参数化方法调用),但我不确定是否可能实现。
有没有办法实现这个?