【问题标题】:Call method when clicking on p:selectOneButton [duplicate]单击p:selectOneButton时调用方法[重复]
【发布时间】:2016-03-10 04:06:47
【问题描述】:

我正在尝试通过p:selectOneButton 触发方法doSomething()。尽管每次尝试都失败了。

由于p:selectOneButton 没有actionListener,我想使用p:ajax 并将其指向方法doSomething(),但是虽然它编译没有错误,但当我单击它时它仍然不会触发所需的方法。

这是我的代码示例:

<h:form id="languageSelectionForm">
    <p:selectOneButton value="#{language.selectedLanguage}">
        <p:ajax event="change" listener="#{language.doSomething}" />
        <f:selectItems value="#{language.languagesMap}" />
    </p:selectOneButton>
</h:form>

点击p:selectOneButton时如何触发doSomething()

【问题讨论】:

  • 检查您的方法签名和 EL 组合。听起来他们不匹配,请查看重复项
  • 当 copy'n'paste'n'stubbed'n'runned 在暂存器项目中运行时,它适用于我和世界上的任何其他人,所有内容都设置为裸默认值并使用最新版本的 JSF/ PrimeFaces/Tomcat。您的问题的原因在目前提供的信息中不可见。请继续努力 stackoverflow.com/tags/jsf/info
  • @BalusC 我做了这个例子。我也面临与valueChangeListner 相同的问题。然后我添加了&lt;f:ajax event="change"/&gt; 然后它的工作。这可能吗?因为我知道&lt;f:ajax&gt; 不适用于primefaces 扩展。
  • 您在p:ajax 中使用了#{language.doSomething}",并且您提到doSomething() 作为方法签名,这两者不匹配。正如我发布的“重复”中的第 11 点所述,我们(至少我是 BalusC 所做的)使用了 `doSomething(ActionEvent)。所以这仍然很奇怪(或者你的方法签名不是 doSomething() 并且我们(至少我)追逐了鬼魂。下次确实按照 BalusC 发布的链接

标签: jsf primefaces


【解决方案1】:

我发现了错误!

为了填写p:selectOneButton,我使用了&lt;f:selectItems value="#{language.languagesMap}" /&gt;。在控制器端,我有一个看起来像这样的方法:

public Map&lt;String, LanguageSpec&gt; getLanguagesMap() { ... }

和 public 连接到参数的 getter 和 public setter 用于选择:

private LanguageSpec selectedLanguage;

当我将第二个 Map 参数从 LanguageSpec 更改为 String 并且 selectedLanguage 参数相同时,事件执行并触发了 doSomething()

因此,在没有检查的情况下,我假设 p:selectOneButton 只能在 &lt;f:selectItems value="#{language.languagesMap}" /&gt; 填充有 keyval 都填充有 String 对象的 Map 时处理事件。

特别感谢以上所有帮助者。通过确认我的示例代码在复制和粘贴时有效,我能够专门针对这个问题测试我的代码。

【讨论】:

  • 我们不应该“测试工作代码”... :-(
  • 如上所述,在发布这篇文章时,我假设我的代码是错误的。我不知道这完全没问题。不过,非常感谢您的帮助。
  • 如果你的 java 方法是 doSomething() 那就错了……如果它有效,那为什么要发布呢?很抱歉,但如果你继续发这样的问题,你得到的帮助会越来越少……下次发minimal reproducible example
  • doSomething() 的签名工作得很好。我不需要 ActionEvent 作为参数。
  • 将 JSF 项目状态设置为 Development。您应该已经看到带有转换错误的面孔消息。另见stackoverflow.com/tags/jsf/info
猜你喜欢
  • 2016-07-27
  • 2019-07-13
  • 2014-01-19
  • 1970-01-01
  • 2012-09-13
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
相关资源
最近更新 更多