首页 > 解决方案 > 如何对 2 个不同的组件使用相同的绑定或什么是正确的方法?

问题描述

我有一个 selectonemenu 出现在同一屏幕上的 2 个不同对话框中,我需要当其中一个更改其值然后用户打开另一个对话框时,selectonemenu 仍然具有先前选择的值,反之亦然。

我尝试对它们进行相同的绑定,但我注意到其中一个会消失,实现此目的的正确方法是什么?

顺便说一句,这是他们的代码:

<p:selectOneMenu binding="#{homeView.somTipoPlato}"
                id="somTipoPlato" style="width:100%">
                <p:ajax event="change" listener="#{homeView.listerprueba}" />
                <f:selectItem itemLabel="Tipo de Comida"></f:selectItem>
                <f:selectItems value="#{homeView.losTipoPlatoSelectItem}" />
            </p:selectOneMenu>

    <p:selectOneMenu id="somTipoPlatoBuscarPlato"
                    binding="#{homeView.somTipoPlato}" style="width:100%">
                    <p:ajax event="change" listener="#{homeView.listerprueba}" />
                    <f:selectItem itemLabel="Tipo de Comida"></f:selectItem>
                    <f:selectItems value="#{homeView.losTipoPlatoSelectItem}" />
                </p:selectOneMenu>

任何正确的方法或解决方法?

标签: jsfprimefaces

解决方案


嘿伙计们,我只需要使用 selectonemenus 的 value 属性,原因如下:

在评论中收到一些反馈并阅读“绑定”属性如何在 JSF 中工作?何时以及如何使用它?

我注意到大多数时候使用绑定是一种不好的做法或设计气味,所以在我的情况下,我不知道这是一种不好的做法,所以我使用它只是因为我认为这是一种正常的做事方式,但事实并非如此,因此正确的解决方案是使用值而不是绑定,这样我就可以实现我想要的,2个具有相同值的选择菜单,如下所示:

<p:selectOneMenu value="#{homeView.selectedValue}"
                id="somTipoPlato" style="width:100%">

                <f:selectItem itemLabel="Tipo de Comida"></f:selectItem>
                <f:selectItems value="#{homeView.losTipoPlatoSelectItem}" />
            </p:selectOneMenu>


       <p:selectOneMenu id="somTipoPlatoBuscarPlato"
                value="#{homeView.selectedValue}" style="width:100%">

                <f:selectItem itemLabel="Tipo de Comida"></f:selectItem>
                <f:selectItems value="#{homeView.losTipoPlatoSelectItem}" />
            </p:selectOneMenu>

请注意,这样他们就可以共享相同的值,并且也不需要 ajax 侦听器,希望这对遇到相同情况的人有所帮助。

在提供的链接中,您将找到使用 value 是正确方法的所有原因


推荐阅读