我正在试图弄清楚如何扩展BalusC的inputDate
示例here。我希望组件更新其中一个下拉列表的每个更改的值并触发一个事件,如下所示:
<balusc:inputDate value="#{myBean.date}">
<p:ajax event="valueChange" update="someOtherComponent"/>
</balusc:inputDate>
<h:outputText id="someOtherComponent" value="#{myBean.formattedDate}"/>
someOtherComponent
取决于#{myBean.date}
更新时更新的值。 (参见update=
并发症末尾的注释。)
我认为这需要修改inputDate
组件,首先在<cc:interface>
部分宣布它有valueChange
行为,如下所示:
<cc:clientBehavior name="valueChange" targets="day month year" event="change"/>
这会使事件触发,但仅仅更新值是不够的,我不知道要改变什么以使其更改值并触发事件。所以问题是:
如何为复合组件添加实时更新其值的功能,以便它们可用于AJAX事件?
我正在运行的环境是Windows 7,Java 1.7.0_80,Tomcat 7.0.68及其版本的EL,JSF Mojarra 2.2.8-14,jstl 1.2,Eclipse Mars.2(4.5.2)。
P.S。我注意到,在使用f:ajax
或p:ajax
添加render=
或update=
元素时,很难让外部组件刷新。即使是:#{component.namingContainer.parent.namingContainer.clientId}:someOtherComponent
的丑陋的解决方法也行不通,但是非常混乱的:#{component.namingContainer.clientId.substring(0, component.namingContainer.clientId.lastIndexOf(':'))}:someOtherComponent
会这样做。