首页 > 解决方案 > 在 SelectOneMenu 中添加一些操作

问题描述

我需要 selectItems 中的变量在 selectOneMenu 中可用,或者我可以通过其他方式获取用户选择的内容。

我需要这个,因为这个项目需要通过 Hibernate.initialize(item)

所以我需要调用我构建的视图(bean)方法来完成它。


<h:selectOneMenu
    id="dependenteSalvar"
    value="#{pessoaView.registro}"
    styleClass="form-control"
    converter="indexConverter">
<f:selectItem itemValue="#{null}" itemLabel="Selecione..."></f:selectItem>
    <t:selectItems
        value="#{pessoaView.pessoasAtivas}"
        var="dependente"
        itemLabel="#{dependente.nome} (#{dependente.documento})"
        itemValue="#{dependente}">
   </t:selectItems>
</h:selectOneMenu >

可能吗?

标签: jsf

解决方案


您可以使用 <f:ajax> 标签在后端监听 selectOneMenu 的事件。

 <h:selectOneMenu
    id="dependenteSalvar"
    value="#{pessoaView.registro}"
    styleClass="form-control"
    converter="indexConverter">
<f:selectItem itemValue="#{null}" itemLabel="Selecione..."></f:selectItem>
    <t:selectItems
        value="#{pessoaView.pessoasAtivas}"
        var="dependente"
        itemLabel="#{dependente.nome} (#{dependente.documento})"
        itemValue="#{dependente}">
   </t:selectItems>
    <f:ajax listener="#{bean.listener}" />

</h:selectOneMenu >

考虑到 <f:ajax> 需要 jsf.js 文件包含在 HTML <h:head> 中。基本上,该文件包含执行魔术的 Javascript 函数。

如果您使用 primefaces,另一种选择是使用 <p:ajax event="change" listener... /> 而不是 f:ajax 来监听值更改事件,如下所示:

<p:selectOneMenu
    id="dependenteSalvar"
    value="#{pessoaView.registro}"
    styleClass="form-control">
<f:selectItem itemValue="#{null}" itemLabel="Selecione..."></f:selectItem>
    <f:selectItems
        value="#{pessoaView.pessoasAtivas}"
        var="dependente"
        itemLabel="#{dependente.nome} (#{dependente.documento})"
        itemValue="#{dependente}">
   </f:selectItems>
    <p:ajax listener="#{bean.listener}" event="change" />

</p:selectOneMenu >

推荐阅读