我调用了一个模板,并传入了如下参数:
<ui:include src="WEB-INF/Subviews/ProductEdit.xhtml">
<ui:param name="items" value="#{produtList}"></ui:param>
<ui:param name="itemToEdit" value="#{productToEdit}"></ui:param>
</ui:include>
在ProductEdit.xhtml中,我有类似这样的东西
<ui:repeat value="#{items}" var="item">
<tr>
...
...
<td style="text-align: center">
<h:commandLink style="cssGenericColumn" action="#{productEditAction}">
<f:setPropertyActionListener target="#{itemToEdit}" value="#{item}"/>
</h:commandLink>
</td>
<tr>
</ui:repeat>
它工作得很好。
我现在想在ProductEdit.xhtml中参数化#{productEditAction},所以我执行了以下操作
<ui:include src="WEB-INF/Subviews/ProductEdit.xhtml">
<ui:param name="items" value="#{produtList}"></ui:param>
<ui:param name="itemToEdit" value="#{productToEdit}"></ui:param>
<ui:param name="itemEditAction" value="#{productEditAction}"></ui:param>
</ui:include>
在第一个页面中,然后在ProductEdit.xhtml中
<ui:repeat value="#{items}" var="item">
<tr>
...
...
<td style="text-align: center">
<h:commandLink style="cssGenericColumn" action="#{itemEditAction}">
<f:setPropertyActionListener target="#{itemToEdit}" value="#{item}"/>
</h:commandLink>
</td>
<tr>
</ui:repeat>
如果出现以下错误,此操作将失败
javax.faces.el.EvaluationException: /WEB-INF/Subviews/ProductEdit.xhtml @45,89 action="#{itemEditAction}": Identity 'itemEditAction' does not reference a MethodExpression instance, returned type: java.lang.String
at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java: at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java: at javax.faces.component.UICommand.broadcast(UICommand.java:109)....
....
....
....
但是,如果操作绑定到模型对象,则此操作有效。所以就像这样
<h:commandLink style="cssGenericColumn" action="#{item.editAction}">
有什么想法吗?
发布于 2011-04-14 16:17:43
将方法作为参数传递应该是这样完成的:
itemBean="#{bean}"
itemEditAction="productEditAction"
在您的组件中,您将把它们放在一起:
action="#{itemBean[itemEditAction]}"
发布于 2012-08-03 16:26:38
也许ActionMapperTagHandler会起作用。
https://stackoverflow.com/questions/5659405
复制相似问题