我对Primefaces的工作逻辑还有一个误解。Primefaces日历没有设置日期
现在<p:calendar>
当我按下提交按钮时,组件不能设置选定的日期。
我看到它已成功进入actionListener方法,但日期值为空。
首先,我尝试使用标准PF example创建我的日历。它看起来太简单了,我认为在用户选择日期或提交表单时,组件应该调用值设置器。但是它在第一个和第二个案例中都没有做到。 好了,我打开谷歌和发现了几个帖子:
Primefaces Calendar Setting Date Value in Backing Bean
p:calendar value not set in backing bean
我保证,我的日历位于<h:form></h:form>
标签之间。另外我试着加入process="@this"
和process=":beginDateForm :endDateForm @this"
,其中beginDateForm和endDateForm是包含<p:calendar>
组件的表单。
此外,我发现post,并试图创造SelectEvent监听方法:
private void changeDate(SelectEvent event) {
beginDate = (Date) event.getObject();
}
但没有成功。
我也尝试使用valueChangeListener变更日期:
<h:form id="beginDateForm">
<p:calendar id="passBeginDate" valueChangeListener="#{territoryFormBean.changeDate}" mode="popup" readonly="true" pattern="dd.MM.yyyy" showOn="button" value="#{territoryFormBean.beginDate}" />
</h:form>
当然我改变事件ValueChangeEvent。
之后我移动<p:calendar>
和<p:commandButton>
部件到相同<h:form>
并试图两个不同的过程值process="passTerrForm:passBeginDate passTerrForm:passEndDate @this"
和process="@form @this"
和process="@form"
在最后一种情况按钮不会触发甚至侦听方法。
我目前的组成部分是:
<p:commandButton value="Search" id="searchPassButton" actionListener="#{territoryFormBean.search}" update=":passTerrForm:territoryTable" process="passTerrForm:passBeginDate passTerrForm:passEndDate @this" partialSubmit="true" />
<p:column>
<p:calendar id="passBeginDate" mode="popup" readonly="true" pattern="dd.MM.yyyy" showOn="button" value="#{territoryFormBean.beginDate}" />
</p:column>
<p:column>
<p:calendar id="passEndDate" mode="popup" readonly="true" pattern="dd.MM.yyyy" showOn="button" value="#{territoryFormBean.endDate}" />
</p:column>
家伙,你可以请建议别的。或者你可能会看到我的代码有什么问题。 我不明白为什么组件不会调用setter。
该代码会引发一些错误? –
@PolRodríguezno。它不是。我查了NetBeans输出,发现只有Fine和Finest的消息有'组件创建' –
顺便说一下,我也检查了位于同一页面的输入字段是否正确提交。我可以在调试模式下看到java字段具有正确的值。 –