2010-10-29 85 views
0

我使用primefaces的DataTable对象来显示一些数据,我有一些问题要实现的东西: 我只有1列第一个表显示,我想展示充满取决于数据的另一个表用户在第一个上选择了什么。使用的dataTable Primefaces

为此,当用户在第一表中选择一排,我填补我TaskController的currentCorbeilleId记录并尝试更新的形式“tasksList”。这是有道理的,当我写的,但现在它不工作...当我点击第一个表中的行,什么都不会发生......

我使用的dataTable组件的正确方法?我应该做些什么才能使其发挥作用? 谢谢你的回答!

<f:view> 
     <h:form id="mainForm"> 
      <p:dataTable id="corbeillesList" 
         value="#{IdentityController.groups}" 
         var="corbeillesList" 
         rendered="#{not empty IdentityController.groups}" 
         selectionMode="single" 
         selection="#{TaskController.currentCorbeilleId}" 
         update="tasksList"> 
       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Name" /> 
        </f:facet> 
        <h:commandLink value="#{corbeillesList.name}"> 
        </h:commandLink> 
       </p:column> 
      </p:dataTable> 
      <p:dataTable id="tasksList" 
         value="#{TaskController.tasks}" 
         var="task" 
         rendered="#{not empty TaskController.tasks}" 
         selectionMode="single"> 
       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Date" /> 
        </f:facet> 
        <h:outputText value="#{task.duedate}" rendered="#{task.duedate != null}"> 
         <f:convertDateTime pattern="dd/MM/yyyy" type="date" dateStyle="short" /> 
        </h:outputText> 
        <h:outputText value="Date non definit" rendered="#{task.duedate == null}" /> 
       </p:column> 
       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Name" /> 
        </f:facet> 
        <h:outputText value="#{task.name}" /> 
       </p:column> 
       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Description" /> 
        </f:facet> 
        <h:outputText value="#{task.description}" /> 
       </p:column> 
       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Verouillee" /> 
        </f:facet> 
        <h:outputText value="oui" rendered="#{task.assignee != null}" /> 
        <h:outputText value="non" rendered="#{task.assignee == null}" /> 
       </p:column> 
      </p:dataTable> 
     </h:form> 
    </f:view> 

回答

4

第二个数据表尚未呈现给客户端。所以它不适用于ajax update。把它放在例如一个h:panelGroup而不是它总是呈现给客户端。

<h:panelGroup id="tasksList"> 
    <h:dataTable rendered="#{not empty TaskController.tasks}" ... > 
     ... 
    </h:dataTable> 
</h:panelGroup> 
+0

它不工作......我试图在另一页上做同样的刷新,甚至用你的panelGroup解决这个问题也行不通。 – MartinMoizard 2010-11-03 19:57:36

+0

答案针对的是您在问题中发布的代码示例。如果所讨论的组件不在** same **'UINamingContainer'组件('h:form','f:subview'等)中,那么你需要在'update'的前缀加':' =“:tasksList”'以便它从根级搜索。 – BalusC 2010-11-03 20:03:08