我有一个搜索条件,可以在两个不同日期之间从数据库中获取详细信息。
我有一个h:slectOneMenu填充了列表{“from”,“to”,“between”}。对于“从”和“到”日期,我必须显示一个富:日历以给出日期输入,对于“之间”,我必须显示两个富:日历以给出输入开始日期和结束日期。
我的代码就像这样
<h:selectOneMenu id="startdate"
value="#{commoncontroller.coverDateType}">
<a4j:support event="onchange" ajaxSingle="true"
action="#controller.dateSelectionChanged}"
reRender="startdateone,startdatetwo"/>
<f:selectItems value="#{controller.startDateMap}" />
</h:selectOneMenu>
<h:panelGrid id="startdateone" layout="block" rendered="#{controller.dateOneStatus}">
<rich:calendar id="date1" value="#{controller.covStartDate}" showWeeksBar="false" />
</h:panelGrid>
<h:panelGrid id="startdatetwo" layout="block" rendered="#{controller.dateTwoStatus}">
<rich:calendar id="date2" value="#{controller.covStartDate2}" showWeeksBar="false" />
</h:panelGrid>
如果我从选择菜单中选择任何值,即使在后端将panelGrid呈现属性设置为true,但是第一次不呈现日历,但如果我刷新页面则会呈现它们。
非常感谢任何帮助。
答案 0 :(得分:0)
关于直接使用rendered
属性的reRendering组件存在一个问题,当我说直接意味着你在代码中做了什么。尝试用a4j:outputPanel
和reRender
这样的父组件包装你的两个面板网格a4j:outputPanel使用它的id。
像这样:
<h:selectOneMenu id="startdate"
value="#{commoncontroller.coverDateType}">
<a4j:support event="onchange" ajaxSingle="true"
action="#controller.dateSelectionChanged}"
reRender="box"/>
<f:selectItems value="#{controller.startDateMap}" />
</h:selectOneMenu>
<a4j:outputPanel id="box">
<h:panelGrid id="startdateone" layout="block" rendered="#{controller.dateOneStatus}">
<rich:calendar id="date1" value="#{controller.covStartDate}" showWeeksBar="false" />
</h:panelGrid>
<h:panelGrid id="startdatetwo" layout="block" rendered="#{controller.dateTwoStatus}">
<rich:calendar id="date2" value="#{controller.covStartDate2}" showWeeksBar="false" />
</h:panelGrid>
</a4j:outputPanel>
希望这会有所帮助。 -cheers