jsf - 如何对 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>
任何正确的方法或解决方法?
解决方案
嘿伙计们,我只需要使用 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 是正确方法的所有原因
推荐阅读
- visual-studio - Visual Studio C++ 程序集 | 括号的含义?
- .net - 如何在多个服务器中使用相同的域(www.example.com)?
- shell - 使用电子邮件 ID 向用户发送通知的 Shell 脚本从数据库中获取它
- python-3.x - PySerial 写入未按预期工作
- selenium-webdriver - 由于动态定位器,无法在 Salesforce Lightning 中找到 xpath
- dart - 如何在颤振飞镖中将数据添加到流中
- java - 防止 AWS 实例停止
- java - Apache Commons 电子邮件设置(无法解析为类型),我似乎有正确的 JAR
- android - 如何编写 Robolectric 单元测试来测试回收者视图项目的向左滑动
- python-3.x - 实际交互与模拟 MockService 的预期交互不匹配