数据网格中的dataTable行选择在Primefaces中不起作用

时间:2015-04-03 16:49:12

标签: jsf primefaces

我正在使用primefaces用于显示数据表格的数据网格如下 -

Facelets页面:

<h:form name="form">
        <p:dataGrid value="#{routeEditingBean.routes}" var="route"
            columns="1">
            <p:column>
                <h:outputText value="#{route.routeId}" />
            </p:column>
            <p:dataTable value="#{route.routeDetailses}" var="rd"
                rowKey="rd.id.employeeId"
                selection="#{routeEditingBean.selectedRouteDetails}">

                <p:column>
                    <h:outputText value="#{rd.id.employeeId}" />
                </p:column>
                <p:column selectionMode="multiple">
                </p:column>
            </p:dataTable>
            <p:commandLink process="@all"
                actionListener="#{routeEditingBean.display()}">
                <p:graphicImage library="images" name="add-car.jpg"></p:graphicImage>
            </p:commandLink>
        </p:dataGrid>
    </h:form>

支持bean:

@ManagedBean
@ViewScoped
public class RouteEditingBean implements Serializable {
/**
 * 
 */
private static final long serialVersionUID = 1L;
List<RouteMaster> routes;
List<RouteDetails> selectedRouteDetails;

RouteMaster delrb;

public RouteEditingBean() {
    // TODO Auto-generated constructor stub
    routes = new ArrayList<RouteMaster>();

    Session session = HibernateUtil.getSessionFactory().openSession();
    org.hibernate.Transaction transaction = null;
    try {
        HttpSession httpsession = (HttpSession) FacesContext
                .getCurrentInstance().getExternalContext()
                .getSession(false);
        LoginBean lb = (LoginBean) httpsession.getAttribute("loginBean");
        transaction = session.beginTransaction();
        Criteria c = session.createCriteria(RouteMaster.class);
        List routeMasterList = c.list();
        for (Iterator iterator = routeMasterList.iterator(); iterator
                .hasNext();) {
            RouteMaster routeMaster = (RouteMaster) iterator.next();
            System.out.println(routeMaster.getRouteId());
            c = session.createCriteria(RouteDetails.class);
            c.add(Restrictions.eq("id.routeId",   routeMaster.getRouteId()));
            Set<RouteDetails> routeDetailses = new HashSet<RouteDetails>();

            for (Iterator iterator1 = c.list().iterator(); iterator1
                    .hasNext();) {
                RouteDetails rd = (RouteDetails) iterator1.next();
                routeDetailses.add(rd);
            }
            routeMaster.setRouteDetailses(routeDetailses);
            routes.add(routeMaster);
        }

    } catch (HibernateException e) {
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
}

public List<RouteMaster> getRoutes() {
    return routes;
}

public void setRoutes(List<RouteMaster> routes) {
    this.routes = routes;
}

public RouteMaster getDelrb() {
    return delrb;
}

public void setDelrb(RouteMaster delrb) {
    this.delrb = delrb;
}

public List<RouteDetails> getSelectedRouteDetails() {
    return selectedRouteDetails;
}

public void setSelectedRouteDetails(List<RouteDetails> selectedRouteDetails) {
    this.selectedRouteDetails = selectedRouteDetails;
}

public void deleteEmployee(RouteMaster rm, RouteDetails rd) {
    System.out.println(rm.getRouteId());
    System.out.println(rd.getId().getEmployeeId());
}

public void display() {
    System.out.println("Inside display");

    if (selectedRouteDetails == null) {
        System.out.println("No selection");
    } else {
        for (Iterator iterator = selectedRouteDetails.iterator(); iterator
                .hasNext();) {
            RouteDetails rd1 = (RouteDetails) iterator.next();
            System.out.println(rd1.getId().getEmployeeId());
        }
    }
}

}

当表单为“已提交”时,所选值将返回null。我想获取dataGrid中所有dataTable的选定值。请帮忙。

1 个答案:

答案 0 :(得分:0)

你可以这样试试吗

List<RouteDetails> selectedRouteDetails = new ArrayList<RouteDetails>();

public RouteEditingBean() {
     selectedRouteDetails = new ArrayList<RouteDetails>();

.....
}