2013-08-29 56 views
2

我有一个DataTable数据表行选择不工作

<p:dataTable id="db" 
    value="#{notificationBox.notificationsList}" 
    var="notificationForm" 
    rows="15" 
    emptyMessage="${msgs.getMessage('table.empty.message')}" 
    paginator="true" 
    paginatorPosition="bottom" 
    rowKey="#{notificationForm}" 
    selection="#{notificationBox.notification}" 
    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} (${notificationBox.notificationsList.size()} ${msgs.getMessage('table.records')})" 
    selectionMode="single" 
    tableStyle="height:430px"> 

    //Rest of the code 

这里如果我选择的任何行,我去为一个Ajax调用(相同primefaces即时行选择的例子)。 Ajax位于Datatable中。

<p:ajax event="rowSelect" listener="#{notificationBox.onRowSelect}" 
    oncomplete="carDialog.show();" /> 

我支持bean类 -

private List<NotificationForm> notificationsList; 
public NotificationForm notification; 
public void onRowSelect(SelectEvent event) { 
    LOGGER.info("Here. +"+notification); 
} 

//Setter and Getters. 

的问题是,如果我选择任何行, “通知” 即将为空。我无法进一步处理。请帮忙。任何替代方法也是受欢迎的。

编辑: -

我的Managed Bean的范围 -

<managed-bean> 
    <managed-bean-name>notificationBox</managed-bean-name> 
    <managed-bean-class>com.comviva.workflow.ui.notification.NotificationBox</managed-bean-class> 
    <managed-bean-scope>view</managed-bean-scope> 
    <managed-property> 
     <property-name>notificationDao</property-name> 
     <value>#{notificationDaoService}</value> 
    </managed-property> 
    <managed-property> 
     <property-name>userInfoDao</property-name> 
     <value>#{userInfoDaoProxy}</value> 
    </managed-property> 
</managed-bean> 
+1

托管bean的范围是什么? –

+0

你的'rowKey'奇怪地令人怀疑。 PrimeFaces会吃那个吗?它是否实现了equals/hashcode?我从来没有尝试过,但我希望在这里看到一个'#{entity.id}'。 – BalusC

+0

@LuiggiMendoza,在视野范围内。我已经更新了细节。 – theGamblerRises

回答

5

你有你p:dataTable裹在h:form标签?这实际上对我的作品:

NotificationBox(@ViewScoped)

package com.mycompany; 

import java.util.Arrays; 
import java.util.List; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

import org.primefaces.event.SelectEvent; 

@ManagedBean 
@ViewScoped 
public class NotificationBox { 

    public class NotificationForm { 

     Integer notificationId; 

     String name; 

     public NotificationForm(Integer id, String nam) { 
      notificationId = id; 
      name = nam; 
     } 

     public String getName() { 
      return name; 
     } 

     public Integer getNotificationId() { 
      return notificationId; 
     } 

     @Override 
     public String toString() { 
      return "NotificationForm [notificationId=" + notificationId 
        + ", name=" + name + "]"; 
     } 
    } 

    private List<NotificationForm> notificationsList; 

    public NotificationForm notification; 

    public NotificationBox() { 
     notificationsList = Arrays.asList(new NotificationForm(1, "Form1"), 
       new NotificationForm(2, "Form2")); 
    } 

    public NotificationForm getNotification() { 
     return notification; 
    } 

    public List<NotificationForm> getNotificationsList() { 
     return notificationsList; 
    } 

    public void onRowSelect(SelectEvent event) { 
     System.out.println(event.getObject()); 
    } 

    public void setNotification(NotificationForm notification) { 
     this.notification = notification; 
    } 

} 

的index.xhtml如果您的XHTML页面进口jQuery库可发生

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core"> 

<h:head> 
</h:head> 

<h:body> 

    <h:form> 
     <p:dataTable id="db" value="#{notificationBox.notificationsList}" 
      var="notificationForm" rows="15" 
      emptyMessage="${msgs.getMessage('table.empty.message')}" 
      paginator="true" paginatorPosition="bottom" 
      rowKey="#{notificationForm.notificationId}" 
      selection="#{notificationBox.notification}" 
      paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} (${notificationBox.notificationsList.size()} ${msgs.getMessage('table.records')})" 
      selectionMode="single" tableStyle="height:430px"> 

      <p:ajax event="rowSelect" listener="#{notificationBox.onRowSelect}" /> 

      <p:column> 
     #{notificationForm.name} 
     </p:column> 
     </p:dataTable> 
    </h:form> 
</h:body> 
</html> 
+0

谢谢,你救了我的一天。 :) – Sertage

0

同样的问题。我删除它,选择工作。