将参数传递给复合组件操作属性

标题确实说明了一切。 我尝试失败,并显示以下错误:
Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
我的尝试如下所示:
<composite:interface>
  <composite:attribute name=\"removeFieldAction\" method-signature=\"void action(java.lang.String)\" />
</composite:interface>
<composite:implementation>
  <h:commandButton value=\"Remove\" action=\"#{cc.attrs.removeFieldAction(\'SomeString\')}\"/>
</composite:implementation>
什么是正确的方法?     
已邀请:
        这确实是行不通的。之后,您将无法再传递\“ extra \”参数。您所声明的
method-signature
必须在使用复合组件的一侧完成。例如。
<my:button action=\"#{bean.remove(\'Somestring\')}\" />
复合组件的实现应如下所示
<h:commandButton value=\"Remove\" action=\"#{cc.attrs.removeFieldAction}\" />
如果这不是您想要的,并且您真的想从复合组件的一面传递它,那么我可以想到两种传递额外参数的方法:使用带有动作监听器的er5ѭ将其作为装饰组件属性传递,或
<f:setPropertyActionListner>
让JSF在调用操作之前将其设置为属性。但是,两者都没有在复合组件中进行任何更改。您将需要至少请求整个bean作为复合组件的属性。 这是ѭ7的例子。这将在调用操作之前设置属性。
<composite:interface>
    <composite:attribute name=\"bean\" type=\"java.lang.Object\" />
    <composite:attribute name=\"action\" type=\"java.lang.String\" />
    <composite:attribute name=\"property\" type=\"java.lang.String\" />
</composite:interface>
<composite:implementation>
    <h:commandButton value=\"Remove\" action=\"#{cc.attrs.bean[cc.attrs.action]}\">
        <f:setPropertyActionListener target=\"#{cc.attrs.bean[cc.attrs.property]}\" value=\"Somestring\" />
    </h:commandButton>
</composite:implementation>
用作
<my:button bean=\"#{bean}\" action=\"removeFieldAction\" property=\"someString\" />
在上面的示例中,bean应该看起来像
public class Bean {

    private String someString;

    public void removeFieldAction() {
        System.out.println(someString); // Somestring
        // ...
    }

    // ...
}
如果您遵循特定的约定,甚至可以完全省略
property
属性。     

要回复问题请先登录注册