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

问题描述 投票:1回答:2

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

出现。

请建议。

jsf
2个回答
0
投票
在EL(

E xpression L语言中,您正在像这样调用方法:

someBean.MoveMainListPointer('First')
bean中的方法如下所示:

public void MoveMainListPointer (MoveOptions M) {...}

现在让我们看一下在EL中传递的参数:'First'。单引号中的文本是字符串。您在EL中使用String作为参数调用该方法,实际上您想在bean中使用某些MoveOptions来调用该方法。您应该注意,它们是不一样的(字符串是

not

MoveOptions)。 EL搜索不存在使用String作为参数的方法,因此无法找到该方法。

解决方案>>

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

public void MoveMainListPointer(String strg) { // instantiate the MoveOptions here based on the string value }

((注意:由于用户尚未输入MoveOptions的代码,因此我无法提供如何执行此操作。)

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


0
投票
根据@ fuggerjaki61发布的解决方案,最终代码如下:-
© www.soinside.com 2019 - 2024. All rights reserved.