【发布时间】:2015-02-09 12:27:57
【问题描述】:
我有一个模板,它是编辑某些元素的表单的一部分。要执行的操作因包含它的页面而异。所以我将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" />
我已阅读文档 (Value and Method Expressions / Parameterized Method Calls),但不确定这是否可行。
有什么方法可以实现吗?
【问题讨论】:
标签: jsf-2 el facelets param uiinclude