2

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

我有 ah: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,日历也不会第一次渲染,但如果我刷新页面,则会渲染它们。

任何帮助深表感谢。

4

1 回答 1

0

直接使用属性重新渲染组件存在问题rendered,当我说直接意味着您刚刚在代码中做了什么时。尝试使用父组件a4j:outputPanelreRendera4j: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>

希望这可以帮助。-干杯

于 2012-07-10T09:37:28.500 回答