在我们的项目中,我们有很多模态面板,以确保用户知道他将要做什么。只需两个按钮(ok和取消),所有这些面板看起来都很相似。
唯一的区别是OK按钮正在执行的操作。
现在我的想法是构建一个通用的模态面板,我只是调用它并传递正常的动作,直到我需要将参数传递给action-method。
我使用它作为OK-Button:
<a:commandButton
id="okGenericPanel"
action="#{actionBean[action]}"
value="#{messages['wizard.button.ok.label']}"
oncomplete="#{oncomplete}">
</a:commandButton>
工作正常。调用此内容如下所示:
<a:commandLink id="testLink"
value="#{messages['home.test']}" ajaxSingle="true">
<rich:componentControl for="genericPanel"
attachTo="testLink" operation="show" event="onclick" />
</a:commandLink>
<ui:include src="/components/genericModalPanel.xhtml">
<ui:param name="actionBean" value="#{adminHomeAction}"/>
<ui:param name="action" value="sayHello"/>
<ui:param name="oncomplete" value="alert('im done');" />
</ui:include>
我已经尝试将参数direclty提供给ui:param,如下所示:
<ui:param name="action" value="sayHello('hello')"/>
或在实际通话中:
action="#{actionBean[action]('hello')}"
但不起作用。
还有其他办法吗?或者只能以这种方式调用没有任何参数的方法?
非常感谢任何帮助, 马丁
答案 0 :(得分:0)
将参数提供为动作参数,而不是方法参数:
首先将其传递给模态面板:
<rich:componentControl event="onclick" for="genericPanel" operation="show" attachTo="testLink">
<f:param value="hello" name="helloParam"/>
</rich:componentControl>
然后在单击按钮时将其传递给辅助bean:
<a:commandButton id="okGenericPanel" action="#{actionBean[action]}" value="#{messages['wizard.button.ok.label']}" oncomplete="#{oncomplete}">
<a:actionparam assignTo="#{someActionBeanField}" value="{helloParam}" converter="..."/>
</a:commandButton>
上面的actionparam值属性中没有#符号。如果参数不是String,则还需要转换器。
在richfaces演示站点有一个更好的例子: http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=editDataTable&cid=1025315
答案 1 :(得分:0)
“实际调用”示例应该在EL 2.2中有效,但是早期版本的Tomcat 7(以及隐含的JBoss 6)和Glassfish 3都有一个错误,其中这不起作用。但这在当前版本中已得到修复。它至少适用于Tomcat 7.0.22和Glassfish 3.1.2。