Jsf 用于从各种bean调用一个方法的复合组件

Jsf 用于从各种bean调用一个方法的复合组件,jsf,Jsf,我需要从多个bean中动态调用一个同名的方法,我已经尝试了下面的复合代码,如果在没有参数的情况下传递,它可以正常工作,但是如果传递了参数,代码就不能工作 <ui:composition> <ui:param name="bean" value="#{managedBean}" /> <ui:param name="method" value="MoveMainListPointer" />

我需要从多个bean中动态调用一个同名的方法,我已经尝试了下面的复合代码,如果在没有参数的情况下传递,它可以正常工作,但是如果传递了参数,代码就不能工作

        <ui:composition> 
            <ui:param name="bean" value="#{managedBean}" />
            <ui:param name="method" value="MoveMainListPointer" />
            <o:methodParam name="methodfinal" value="#{bean[method]}" />
            <p:commandButton action="#{methodfinal}" value="Submit" />
            <br/>
        </ui:composition>
错误

method not found
发生

请建议。

在EL(ExpressionL语言)中,您这样调用该方法:

someBean.MoveMainListPointer('First')
public void MoveMainListPointer (MoveOptions M) {...}
bean中的方法如下所示:

someBean.MoveMainListPointer('First')
public void MoveMainListPointer (MoveOptions M) {...}
现在让我们看看EL中传递的参数:
“First”
。单引号中的文本是字符串。在EL中使用字符串作为参数调用该方法,实际上您希望在bean中使用一些
MoveOptions
调用该方法。您应该注意到这些选项不相同(字符串是不是
移动选项
)。EL搜索以字符串作为参数的方法,该方法不存在,因此无法找到该方法

解决方案

由于要使用字符串设置参数,请将bean中的方法更改为:

public void MoveMainListPointer(String strg) {
    // instantiate the MoveOptions here based on the string value
}
(注意:由于用户尚未输入
MoveOptions
的代码,因此我无法提供如何执行此操作。)


方法的惯例是第一种情况是小写()。

根据@fuggerjaki61发布的解决方案,最终代码如下:-

    public static enum MoveOptions {
        Save,
        Edit,
        Clear,
        Delete,
        Check,
        Approve,
        First,
        Previous,
        Next,
        Last,
        Goto,
        Print,
        Copy,
        AdvanceSearch,
        Knocking
    }
控制

            <ui:param name="bean" value="#{managedBean}" />

            <o:methodParam name="MFS" value="#{bean.moveMainListPointer('Save')}" />
            <ui:param name="MFSB" value="#{bean.lockSaveButton}" />
            <p:commandButton id="btnSave" action="#{MFS}" value="Save" disabled="#{MFSB}"/>

            <o:methodParam name="MFS" value="#{bean.moveMainListPointer('Edit')}" />
            <p:commandButton id="btnEdit" action="#{MFS}" value="Edit" />

最后是电话

<pc:PinnacleToolBar managedBean="#{BeanName}" />


找不到该方法,因为您试图调用
MoveMainListPointer(字符串)
。通过字符串初始化方法中的
MoveOptions
,可以解决这个问题!你已经试过我在之前的评论中所说的了吗?它起作用了吗?方法也是以小写开始的()@fuggerjaki61我不明白“字符串方法”是什么意思,我面对的是,如果方法有一个参数,那么它就不能像上面提到的那样被传递,但是如果方法没有参数,它就工作f9,我的实际问题是创建一组大约16个按钮,从任何bean名称调用同一个函数,因此我希望在composit组件或taglib中动态传递bean名称,并使用参数修复方法名称。
'some text'
是el(表达式语言)中的字符串。您正试图使用此el表达式调用
somebean.MoveMainListPointer('First')
。el认为它应该调用
MoveMainListPointer(stringstrg)
,因为
“某些文本”
是一个字符串。尝试用这个字符串实例化
MoveOptions
。@fuggerjaki61您的意思是我应该避免使用参数??很抱歉,我真的无法理解,请给出一个简短的例子,如果可能的话,因为如果我没有hv参数i hv已经没有问题了,问题是参数,即如果我将参数从(MoveOptions m)更改为(String m),即使问题保持不变。此外,我的实际需求是通过方法separate并使用parameter.thanx进行fix函数调用。如果成功,我将发布最终解决方案作为答案
            <ui:param name="bean" value="#{managedBean}" />

            <o:methodParam name="MFS" value="#{bean.moveMainListPointer('Save')}" />
            <ui:param name="MFSB" value="#{bean.lockSaveButton}" />
            <p:commandButton id="btnSave" action="#{MFS}" value="Save" disabled="#{MFSB}"/>

            <o:methodParam name="MFS" value="#{bean.moveMainListPointer('Edit')}" />
            <p:commandButton id="btnEdit" action="#{MFS}" value="Edit" />
<pc:PinnacleToolBar managedBean="#{BeanName}" />