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

时间:2020-02-08 13:46:18

标签: jsf

我需要从多个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>

以下通话成功

<pc:PinnacleToolBar managedBean="#{BeanName1}" />
<pc:PinnacleToolBar managedBean="#{BeanName2}" />
<pc:PinnacleToolBar managedBean="#{BeanName3}" />

但作为参数传递,

        <ui:composition> 
            <ui:param name="bean" value="#{managedBean}" />
            <ui:param name="method" value="MoveMainListPointer('First')" />
            <o:methodParam name="methodfinal" value="#{bean[method]}" />
            <p:commandButton action="#{methodfinal}" value="Submit" />
            <br/>
        </ui:composition>
    public void MoveMainListPointer (MoveOptions M) {
        gu.MovePointer( this, M, listHeader, detTable, detTableHeaderNames, mainArray, detailArray );
    }

错误

method not found

发生。

建议。

2 个答案:

答案 0 :(得分:1)

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

    public static enum MoveOptions {
        Save,
        Edit,
        Clear,
        Delete,
        Check,
        Approve,
        First,
        Previous,
        Next,
        Last,
        Goto,
        Print,
        Copy,
        AdvanceSearch,
        Knocking
    }
    public void moveMainListPointer (String wToDo) {
        MoveOptions M = MoveOptions.valueOf(wToDo);
        System.out.println("Option: " + M);
        gu.MovePointer( this, M, listHeader, detTable, detTableHeaderNames, mainArray, detailArray );
    }

控件

            <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}" />

答案 1 :(得分:0)

在EL( E xpression L 语言)中,您正在调用如下方法:

    EmployeeId  FunctionId   CompanyId    SortOrder  Primacy
    54          273          8            1          Primary
    54          273          19           2          Primary
    54          273          32           3          Primary
    54          273          151          4          Primary
    54          897          49           5          Secondary
    54          897          77           6          Secondary
    54          897          54           7          Secondary
    54          333          56           8          Third
    54          333          90           9          Third
    54          123          78           10         Fourth

bean中的方法如下:

someBean.MoveMainListPointer('First')

现在,让我们看一下在EL中传递的参数:public void MoveMainListPointer (MoveOptions M) {...} 。单引号中的文本是字符串。您在EL中使用String作为参数调用该方法,而实际上您想在bean中使用某些'First'来调用该方法。您应该注意,它们是不一样的(字符串是不是 MoveOptions)。 EL搜索不存在以String作为参数的方法,因此找不到该方法。

解决方案

要使用String设置参数时,请将Bean中的方法更改为以下方法:

MoveOptions

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

方法的约定是,第一种情况为小写(see google conventions)。