Jsf 如何基于日历更新prime faces上的选定日期,以便呈现/隐藏面板内容
我有一个组件,用户可以在其中选择设置任何日期,甚至设置为null,但是当日期不为null时,它应该呈现一个面板以允许其他选项。但是,日期不会更新,并且始终为空,因此它不会呈现面板。这方面需要帮助。下面是我的代码:Jsf 如何基于日历更新prime faces上的选定日期,以便呈现/隐藏面板内容,jsf,calendar,primefaces,Jsf,Calendar,Primefaces,我有一个组件,用户可以在其中选择设置任何日期,甚至设置为null,但是当日期不为null时,它应该呈现一个面板以允许其他选项。但是,日期不会更新,并且始终为空,因此它不会呈现面板。这方面需要帮助。下面是我的代码: <p:calendar id="dt" value="#{user.deadline}" pattern="MM/dd/yyyy"
<p:calendar id="dt"
value="#{user.deadline}"
pattern="MM/dd/yyyy"
showOn="button"
mindate="#{userr.minDate}">
<f:validator validatorId = "dateValidator"/>
<f:attribute name="minDate" value="#{user.minDate}" />
<p:ajax event="dateSelect" listener="#{user.updateDeadlineDate}" update=":userForm:userReminderForm"/>
</p:calendar>
<p:panel id= "myPanel" rendered="#{user.getDeadline != null}">
.. some component that needs user.deadline
</p:panel>
首先,您的更新目标可能是错误的(嵌套表单
:userForm:usermemenderform
在HTML/JSF中无效),您可能想执行update=“:userForm”
(因为您无法直接更新面板):
然后卸下
最后,我将在
呈现的
属性中使用空
关键字,而不是!=null
:rendered=“#{not empty user.deadline}”
首先,您的更新目标可能是错误的(嵌套表单:userForm:usermemenderform
在HTML/JSF中无效),可能您想执行更新=“:userForm”
(因为您无法直接更新面板):
然后卸下
最后,我将在呈现的
属性中使用空
关键字,而不是!=null
:rendered=“#{not empty user.deadline}”
有几件事:
- 您可以使用
而不是使用{user.getDeadline}
{user.getDeadline}
是f:attribute name=“minDate”
的副本,请删除其中一个p:calendar minDate=“#{userr.minDate}”
- 对于
,有一个默认的验证器,除非您正在执行特殊验证,否则请删除p:calendar
- bean必须至少具有视图范围(而不是请求范围)才能工作
rendered
属性时要记住的一点是,元素对客户端不可见。必须指示客户端更新未渲染元素的父元素。(看起来你已经在这么做了。)
如果日历和面板的格式相同,则可以使用@form
作为目标。这样,元素的形式将被更新。(这可能是您想要的。)
.. 某些组件需要user.deadline
奖励:。几件事:
- 您可以使用
而不是使用{user.getDeadline}
{user.getDeadline}
是f:attribute name=“minDate”
的副本,请删除其中一个p:calendar minDate=“#{userr.minDate}”
- 对于
,有一个默认的验证器,除非您正在执行特殊验证,否则请删除p:calendar
- bean必须至少具有视图范围(而不是请求范围)才能工作
rendered
属性时要记住的一点是,元素对客户端不可见。必须指示客户端更新未渲染元素的父元素。(看起来你已经在这么做了。)
如果日历和面板的格式相同,则可以使用@form
作为目标。这样,元素的形式将被更新。(这可能是您想要的。)
.. 某些组件需要user.deadline
奖励:。OP的更新目标是正确的。您无法更新未呈现的元素,因为客户端不知道该元素的存在。您是对的@siebz0r,我忽略了这种情况。我的答案是正确的。非常感谢你指出这些,它现在正在工作:)OP的更新目标是正确的。您无法更新未呈现的元素,因为客户端不知道该元素的存在。您是对的@siebz0r,我忽略了这种情况。我的答案是正确的。非常感谢您指出这些问题,它现在起作用了:)
public Date getDeadline() {
return deadline;
}
public void setDeadline(Date deadline) {
this.deadline=deadline;
}
public void updateDeadlineDate(DateSelectEvent event) {
this.setDeadline(event.getDate());
}
<p:ajax event="dateSelect" listener="#{user.updateDeadlineDate}" update=":userForm"/>
<p:panel id= "myPanel" rendered="#{user.deadline != null}">
.. some component that needs user.deadline
</p:panel>
public void updateDeadlineDate(DateSelectEvent event) {
mindDate = event.getDate()
this.setDeadline(mindDate);
}
<p:calendar id="dt"
value="#{user.deadline}"
pattern="MM/dd/yyyy"
showOn="button"
mindate="#{userr.minDate}">
<p:ajax event="dateSelect" listener="#{user.updateDeadlineDate}" update="@form"/>
</p:calendar>
<p:panel id= "myPanel" rendered="#{user.getDeadline != null}">
.. some component that needs user.deadline
</p:panel>