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