从通用模式面板(JSF,SEAM)调用并传递参数到actionclass方法

时间:2011-12-14 10:43:45

标签: java generics jsf seam

在我们的项目中,我们有很多模态面板,以确保用户知道他将要做什么。只需两个按钮(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')}"

但不起作用。

还有其他办法吗?或者只能以这种方式调用没有任何参数的方法?

非常感谢任何帮助, 马丁

2 个答案:

答案 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。

另见: