2014-12-19 103 views
0

我想根据在<h:selectOneMenu>中选择的值显示和隐藏<h:panelGrid>在h:selectOneMenu中选择的值的基础上显示/隐藏h:panelGrid

的代码是:

<p:dialog id="logClassDlg" header="Log Class Teached" widgetVar="logClass" modal="true" > 
    <h:form> 
     <p:growl id="growl" showDetail="true" /> 
     <h:panelGrid id="logClassPanelGrd1" columns="2"> 

      <h:outputLabel for="class" value="Class: " /> 
      <h:selectOneMenu id="class" value="#{logClassBean.classLog.classTitle}"> 
       <f:selectItem itemValue="Reading" itemLabel="Reading" /> 
       <f:selectItem itemValue="Memorization" itemLabel="Memorization" /> 
       <f:selectItem itemValue="Translation" itemLabel="Translation" /> 
       <f:selectItem itemValue="Language" itemLabel="Language" /> 
       <f:selectItem itemValue="Grammer" itemLabel="Grammer" /> 
       <f:ajax render="logClassPanelGrdBook" /> 
      </h:selectOneMenu> 

     </h:panelGrid> 

     <h:panelGrid id="logClassPanelGrdBook" columns="2" rendered="#{(logClassBean.classLog.classTitle ne 'Language') and (logClassBean.classLog.classTitle ne 'Grammar')}"> 
      <p:outputLabel value="Book" /> 
      <h:selectOneMenu id="book" value="#{logClassBean.classLog.classStatus}"> 
       <f:selectItem itemValue="first" itemLabel="first" /> 
       <f:selectItem itemValue="second" itemLabel="second" /> 
       <f:selectItem itemValue="third" itemLabel="third" /> 
       <f:selectItem itemValue="fourth" itemLabel="fourth" /> 
       <f:selectItem itemValue="fifth" itemLabel="fifth" /> 
      </h:selectOneMenu> 
     </h:panelGrid> 

正如你可以看到我想要显示的面板网格logClassPanelGrdBook只有当所选值不语和文法即

rendered="#{(logClassBean.classLog.classTitle ne 'Language') and (logClassBean.classLog.classTitle ne 'Grammar')}" 

但面板网格无论选择哪个值都会显示,当其他值(阅读,记忆和翻译)被选中时,它应该隐藏。

任何帮助/指针,将不胜感激。谢谢。

回答

1

部分<f:ajax render="logClassPanelGrdBook" />将不会更新并以此方式重新检查panelGrid的呈现函数。您将需要更新其父元素。

例如,你可以用<h:panelGroup>包装它:

 <h:panelGrid id="logClassPanelGrd1" columns="2"> 

      <h:outputLabel for="class" value="Class: " /> 
      <h:selectOneMenu id="class" value="#{logClassBean.classLog.classTitle}"> 
       <f:selectItem itemValue="Reading" itemLabel="Reading" /> 
       <f:selectItem itemValue="Memorization" itemLabel="Memorization" /> 
       <f:selectItem itemValue="Translation" itemLabel="Translation" /> 
       <f:selectItem itemValue="Language" itemLabel="Language" /> 
       <f:selectItem itemValue="Grammar" itemLabel="Grammar" /> 
       <f:ajax render="logClassPanelGrdBook" /> 
      </h:selectOneMenu> 

     </h:panelGrid> 
     <h:panelGroup id="logClassPanelGrdBook"> 
     <h:panelGrid columns="2" rendered="#{(logClassBean.classLog.classTitle ne 'Language') and (logClassBean.classLog.classTitle ne 'Grammar')}"> 
      <p:outputLabel value="Book" /> 
      <h:selectOneMenu id="book" value="#{logClassBean.classLog.classStatus}"> 
       <f:selectItem itemValue="first" itemLabel="first" /> 
       <f:selectItem itemValue="second" itemLabel="second" /> 
       <f:selectItem itemValue="third" itemLabel="third" /> 
       <f:selectItem itemValue="fourth" itemLabel="fourth" /> 
       <f:selectItem itemValue="fifth" itemLabel="fifth" /> 
      </h:selectOneMenu> 
     </h:panelGrid> 
     <h:panelGroup> 

我也改变了选择项目的值从格拉默到语法,因为它没有匹配渲染属性的值。

如果这不起作用,您还应该检查当您单击<h:selectOneMenu>时是否正确设置了bean值。

+0

谢谢。已经知道我必须渲染@form。谢谢你的帮助。 PS:Grammer的东西被用户编辑:Tiny,原来的代码不是那样的。谢谢你的帮助。 – Hassan 2014-12-20 06:47:51

相关问题