简体   繁体   English

dataGrid中dataTable的行选择在Primefaces中不起作用

[英]Row selection for dataTable inside dataGrid is not working in Primefaces

I am using primefaces For displaying a datagrid of datatables as follow - 我正在使用primefaces用于显示数据表的数据网格,如下所示-

Facelets page: 构面页面:

<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>

Backing-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());
        }
    }
}

} }

When form is Submitted then selected values are returning null. 提交表单后,所选值将返回null。 I want to get selected values for all dataTable in dataGrid. 我想获取dataGrid中所有dataTable的选定值。 Please help. 请帮忙。

can you try it this way 你可以这样尝试吗

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

or 要么

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

.....
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM