我需要从多个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
出现。
请建议。
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)。