我需要从多个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
发生。
建议。
答案 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)。