首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将动作方法名作为参数传递给facelets组件

将动作方法名作为参数传递给facelets组件
EN

Stack Overflow用户
提问于 2011-04-14 14:26:14
回答 2查看 10.1K关注 0票数 18

我调用了一个模板,并传入了如下参数:

代码语言:javascript
复制
<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中,我有类似这样的东西

代码语言:javascript
复制
<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},所以我执行了以下操作

代码语言:javascript
复制
<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中

代码语言:javascript
复制
<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>

如果出现以下错误,此操作将失败

代码语言:javascript
复制
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)....
 ....
 ....
 ....

但是,如果操作绑定到模型对象,则此操作有效。所以就像这样

代码语言:javascript
复制
 <h:commandLink style="cssGenericColumn" action="#{item.editAction}">

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-14 16:17:43

将方法作为参数传递应该是这样完成的:

代码语言:javascript
复制
itemBean="#{bean}"
itemEditAction="productEditAction"

在您的组件中,您将把它们放在一起:

代码语言:javascript
复制
action="#{itemBean[itemEditAction]}"
票数 53
EN

Stack Overflow用户

发布于 2012-08-03 16:26:38

也许ActionMapperTagHandler会起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5659405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档