JSF 页面中的动态操作

Posted

技术标签:

【中文标题】JSF 页面中的动态操作【英文标题】:Dynamic Action in JSF page 【发布时间】:2011-09-07 08:58:54 【问题描述】:

我有一个 JSF 页面。我的 CommandButton 操作方法值取决于 bean 变量值。 例子: Bean headerBean 具有值为“someBean.doAction1()”的变量 actionValue

当我使用时,它说 headerBean.actionValue 不是正确的方法。

如何将操作值作为“someBean.doAction1”而不是 headerBean.actionValue。

谢谢,

【问题讨论】:

你能发布一些你现在拥有的样本吗? 【参考方案1】:

您可以使用大括号表示法。

<h:commandButton value="submit" action="#someBean[headerBean.actionValue]" />

#headerBean.actionValue 返回一个例如doAction1 的字符串时,这将有效地调用#someBean.doAction1

如果要调用的bean名称当前实际上在actionvalue中(headerBean.actionValue返回someBean.doAction1),则需要将其拆分为一个返回bean名称的字段和一个返回方法名称的字段,然后使用

<h:commandButton value="submit" action="#requestScope[headerBean.beanName][headerBean.actionValue]" />

如果headerBean.beanName 返回 'someBean' 并且headerBean.actionValue 返回doAction1,上面将调用#somebean.doAction1

【讨论】:

您好,感谢您的回复。我的 headerBean.actionValue 返回 someBean.doAction1。我认为使用您的解决方案使其成为 [code]#someBean.someBean.doAction1[code]。 headerBean.actionValue 的值也返回 bean 名称。 这很有趣——我没有意识到语法有效。谢谢你的信息。 哇。有趣的语法。我通常用反射做类似的事情,比如在运行时生成方法名并使用反射来调用它。很高兴知道我也可以在 JSF 中做到这一点。 +1 @mahesh:您应该在期间拆分它,然后使用类似(假设 bean 是请求范围)#requestScope[headerBean.beanName][headerBean.beanAction] 之类的东西。 @Harry:我想你可能会发现这个例子很有用:***.com/questions/5713718/…

以上是关于JSF 页面中的动态操作的主要内容,如果未能解决你的问题,请参考以下文章

JSF:将页面动态包含到primefaces对话框中

在页面加载时调用 JSF 托管 bean 操作

从 JSF2 中的操作导航时如何传递视图参数?

JSF 如何从支持 bean 重定向到支持 bean 中动态构建的 URL?

JSF 2 动态用户界面:包括从 2.1.7 到 2.1.9 不工作

如何通过导航菜单 ajax-refresh 动态包含内容? (JSF SPA)