可展开的表格可以用来显示表格中某一条记录的详细信息。在这个例子里面,我们使用一个额外的rich:dataTable来显示被选中行的详细信息。
点击任意一条记录后面的+/-号来显示该条记录的详细信息:
<h:form> <rich:dataTable value="#{wonderBean.wonders}" var="wonder"> <rich:column colspan="3"> <f:facet name="header">Wonder</f:facet> <h:outputText value="#{wonder.name}" /> <a4j:commandLink id="link" value="#{!wonderBean.show?'[+]':'[-]'}" reRender="link"> <a4j:actionparam name="val" value="#{!wonderBean.show}" assignTo="#{wonderBean.show}" /> </a4j:commandLink> </rich:column> <rich:columnGroup> <rich:column> <a4j:outputPanel ajaxRendered="true"> <rich:dataTable value="#{wonder.details}" var="detail" rendered="#{wonderBean.show}" style="border: 0px"> <rich:column> <f:facet name="header">Location</f:facet> <h:outputText value="#{detail.location}" /> </rich:column> <rich:column> <f:facet name="header">Image</f:facet> <h:graphicImage value="#{detail.imageUrl}" /> </rich:column> </rich:dataTable> </a4j:outputPanel> </rich:column> </rich:columnGroup> </rich:dataTable> </h:form>
public class WonderBean { private WonderService service; private Boolean show; public Boolean getShow() { return show;} public void setShow(Boolean show) { this.show = show; } public WonderService getService() { return service; } public void setService(WonderService service) { this.service = service; } public WonderBean() { super(); } public ArrayList<Wonder> getWonders() { return service.getList(); } }
public class WonderService { private ArrayList <Wonder> list; public ArrayList<Wonder> getList() { return list; } @PostConstruct public void init () { list = new ArrayList <Wonder>(); list.add(new Wonder("Chichen Itza", "Mexico", "http://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Chichen-Itza-Castillo-Seen-From-East.JPG/90px-Chichen-Itza-Castillo-Seen-From-East.JPG")); list.add(new Wonder("Christ the Redeemer", "Brazil", "http://upload.wikimedia.org/wikipedia/commons/thumb/5/50/CorcovadofotoRJ.jpg/90px-CorcovadofotoRJ.jpg")); list.add(new Wonder("Colosseum", "Italy", "http://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Colosseum_in_Rome%2C_Italy_-_April_2007.jpg/90px-Colosseum_in_Rome%2C_Italy_-_April_2007.jpg")); list.add(new Wonder("Great Wall of China", "China", "http://upload.wikimedia.org/wikipedia/commons/thumb/1/16/GreatWallNearBeijingWinter.jpg/90px-GreatWallNearBeijingWinter.jpg")); list.add(new Wonder("Machu Picchu", "Peru", "http://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Before_Machu_Picchu.jpg/90px-Before_Machu_Picchu.jpg")); list.add(new Wonder("Petra", "Jordan", "http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/PetraMonastery.JPG/90px-PetraMonastery.JPG")); list.add(new Wonder("Taj Mahal", "India", "http://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Taj_Mahal_in_March_2004.jpg/90px-Taj_Mahal_in_March_2004.jpg")); } public WonderService() { } }
public class Wonder implements java.io.Serializable{ private String name; private Details details; public String getName() { return name; } public void setName(String name) { this.name = name; } public Wonder(String name, String location, String imageUrl) { super(); this.name = name; this.details = new Details (location, imageUrl); } public Details getDetails() { return details; } }
<managed-bean> <managed-bean-name>wonderBean</managed-bean-name> <managed-bean-class>data.WonderBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>service</property-name> <property-class>data.WonderService</property-class> <value>#{service}</value> </managed-property> </managed-bean> <managed-bean> <managed-bean-name>service</managed-bean-name> <managed-bean-class>data.WonderService</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>