我正在使用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的选定值。请帮忙。
答案 0 :(得分:0)
你可以这样试试吗
List<RouteDetails> selectedRouteDetails = new ArrayList<RouteDetails>();
或
public RouteEditingBean() {
selectedRouteDetails = new ArrayList<RouteDetails>();
.....
}