【问题标题】:Bootsfaces button, how to perform actionListenerBootsfaces 按钮,如何执行 actionListener
【发布时间】:2017-10-26 00:15:20
【问题描述】:

我需要使用按钮来调用托管 Bean 的方法,但它没有任何 ActionListener。我有这样的事情:

<b:button value="Tes1"  look="warning"size="lg"/>

我无法使用命令按钮。有什么办法吗? 谢谢!

【问题讨论】:

  • 为什么不能使用命令按钮?你需要'get'吗?唯一的解决方案是调用一些调用远程操作的 javascript,该操作执行“后重定向获取”,但随后您有效地创建了一个应该执行相同“PRG”的命令按钮......所以
  • 我需要它在表单外,commandButton 需要在表单内。
  • 为什么在表单之外需要它?
  • 该按钮打开一个b:modal。如果我使用 commanButton,它会执行提交并且不显示模式窗口。
  • Uuuhhh yes and no... 不提交和字段并不意味着您不能调用操作。 stackoverflow.com/questions/25339056/…

标签: jsf bootsfaces


【解决方案1】:

在问题和尝试的解决方案中,它确实是从错误的方式接近它。 b:commandButton 可以通过以下方式使用:

<b:commandButton value="Trigger (JSF passthrough)2" actionListener="#{managedBeanName.performCall}" immediate="true" update="@(#id_element)"/>

这个解决方案的关键是immediate=true 来取消验证,update="@(#id_element)" 只更新屏幕的一部分。您也可以使用update="@none" 不更新屏幕。

它需要在表单中。

另一种选择是使用process="@this" 而不是immediate=true。这样,它不会执行任何验证,因为它不会从表单提交任何输入。

<b:commandButton value="Trigger (JSF passthrough)2" actionListener="#{managedBeanName.performCall}" process="@this" update="@(#id_element)"/>

自从在 JSF 中引入 'ajax' 后,后一种解决方案更常用。

另见:

【讨论】:

  • 这会跳过验证,但会将值分给它。所以您确实要提交吗?否则process="this" 将是一个更好的选择。没有验证,也没有提交值。在现代基于 ajax 的解决方案中使用它而不是 immediate="true" 更好
  • 查看stackoverflow.com/questions/10502326/… 以了解immediate="true" 与ajax 的结合b:commandButton 默认情况下是ajaxified
  • 它是否提交表单并不重要,但我可以将其添加到我的答案中,这样它是一个更完整的解决方案......
  • 改进的答案
  • 但是您现在描述的“其他”选项是,因为存在“ajax”,所以是更好的选择。从这个答案中不清楚你为什么选择不太好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 2012-05-01
  • 2016-09-02
  • 1970-01-01
相关资源
最近更新 更多