Jsf 单击p:SelectOne按钮时调用方法
我试图通过Jsf 单击p:SelectOne按钮时调用方法,jsf,primefaces,Jsf,Primefaces,我试图通过p:selectOneButton触发一个方法doSomething()。尽管每次尝试都失败了 由于p:selectOneButton没有actionListener,我考虑使用p:ajax并将其指向方法doSomething(),但尽管它编译时没有错误,但当我单击它时,它仍然不会触发所需的方法 以下是我的代码示例: <h:form id="languageSelectionForm"> <p:selectOneButton value="#{language
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()
?我发现了错误
要填充p:selectOneButton
我使用了
。在控制器端,我有一个类似以下的方法:
publicmap getLanguagesMap(){…}
和public连接到用于选择的参数的getter和public setter:
private language spec selected language代码>
当我将第二个Map参数从LanguageSpec
更改为String
,并将selectedLanguage
参数更改为selectedLanguage
时,事件执行并触发doSomething()
因此,在没有进行检查的情况下,我假设p:selectOneButton
只能在
中填充了键
和val
中都填充了字符串
对象的映射时处理事件
特别感谢以上所有的帮助。通过确认我的示例代码在复制和粘贴时工作,我能够专门针对这个问题测试我的代码。我发现了错误
要填充p:selectOneButton
我使用了
。在控制器端,我有一个类似以下的方法:
publicmap getLanguagesMap(){…}
和public连接到用于选择的参数的getter和public setter:
private language spec selected language代码>
当我将第二个Map参数从LanguageSpec
更改为String
,并将selectedLanguage
参数更改为selectedLanguage
时,事件执行并触发doSomething()
因此,在没有进行检查的情况下,我假设p:selectOneButton
只能在
中填充了键
和val
中都填充了字符串
对象的映射时处理事件
特别感谢以上所有的帮助。通过确认我的示例代码在复制和粘贴时起作用,我能够专门针对此问题测试我的代码。请检查此检查您的方法签名和EL组合。这听起来好像不匹配,请看副本。当在scratchpad项目中运行copy'n'paste'n'stubbed'n时,它对我和世界上其他任何人都有效,所有内容都设置为纯默认值,并使用最新版本的JSF/PrimeFaces/Tomcat。到目前为止,您的问题原因在提供的信息中不可见。请注意@BalusC,我做了这个例子。而且我在valueChangeListner
方面也面临同样的问题。然后我添加了
,然后它就开始工作了。这可能吗?因为我知道
不能使用primefaces扩展。您在p:ajax
中使用了{language.doSomething}
,并且您提到了doSomething()
作为方法签名,这两种方法不匹配。我们(至少是BalusC所做的)使用了`doSomething(ActionEvent)正如我在“duplicate”中第11点提到的,这仍然很奇怪(或者你的方法签名不是doSomething(),而我们(至少是我)追踪鬼魂。下次确实要关注BalusC Posted链接,请检查此检查您的方法签名和EL组合。听起来它们不匹配,请查看副本。在scratchpad项目中运行“复制”“粘贴”“存根”“使用最新版本”时,它对我和世界上任何其他人都有效JSF/PrimeFaces/Tomcat的ns。到目前为止,您的问题的原因在提供的信息中是不可见的。请解决这个问题@BalusC我做了这个例子。我也面临着与valueChangeListner
相同的问题。然后我添加了
,然后它就开始工作了。这可能吗?因为我知道
不会与pri一起工作mefaces扩展。您在p:ajax
中使用了{language.doSomething}
,并且您提到了doSomething()
作为方法签名,这两个签名不匹配。我们(至少我是BalusC所做的)使用了我发布的“副本”第11点中提到的“doSomething(ActionEvent)”。所以这仍然很奇怪(或者你的方法签名不是doSomething(),我们(至少我)追逐幽灵。下次确实要遵循链接BalusC postedWe不应该“测试工作代码”…:-(如上所述,在发布本文时,我假设我的代码是错误的。我不知道它是完全正确的。不过,非常感谢您的帮助。如果您的java方法是doSomething())这是错误的…如果它是有效的,那么为什么要发布它???很抱歉,但是如果你一直发布这样的问题,你会得到越来越少的帮助…下次发布带有doSomething()的签名
工作得非常好。我不需要将ActionEvent
作为参数。将JSF项目状态设置为Development
。您应该看到带有转换错误的faces消息。另请参见我们不应该“测试工作代码”…:-(如上所述,在发布本文时,我假设我的代码是错误的。我不知道它是完全正确的。不过,非常感谢您的帮助。如果您的java方法是doSomething())这是错误的…如果它正在工作,那么为什么要发布它???很抱歉,但是如果你一直发布这样的问题,你会得到越来越少的帮助…下次发布签名时,使用doSomething()
工作得非常好。我不需要ActionEvent
作为参数。设置JSF项目