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

How to use same binding for 2 different components or whats the proper method?

我有一个 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>

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

大家好,我只需要使用选择菜单的值 属性,原因如下:

收到评论中的一些反馈并阅读后 How does the 'binding' attribute work in JSF? When and how should it be used?

我注意到大多数时候使用绑定是一种不好的做法或设计味道,所以就我而言,我不知道这是一种不好的做法,所以我使用它只是因为我认为这是正常的做事情的方法,但事实并非如此,所以正确的解决方案是使用值而不是绑定,这样我就可以实现我想要的,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 听众,希望这对遇到相同情况的人有所帮助。

在 link 提供的内容中,您会发现使用值是正确方法的所有原因