重新渲染丰富:日历第一次不起作用,但正在进行页面刷新

时间:2012-07-05 20:09:33

标签: jsf richfaces ajax4jsf

我有一个搜索条件,可以在两个不同日期之间从数据库中获取详细信息。

我有一个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,但是第一次不呈现日历,但如果我刷新页面则会呈现它们。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

关于直接使用rendered属性的reRendering组件存在一个问题,当我说直接意味着你在代码中做了什么。尝试用a4j:outputPanelreRender这样的父组件包装你的两个面板网格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