在日常应用中,经常需要对table中的数据进行批量操作(例如: 删除),在jsp中实现这样操作的例子比比介是,但是要找在jsf中实现的例子可就难了.
通过对appfuse的研究,发现了一个比较精妙的js函数(在script/global.js中).
js 代码
- function checkAll(theForm) { // check all the checkboxes in the list
- for (var i=0;i
- var e = theForm.elements[i];
- var eName = e.name;
- if (eName != 'allbox' &&
- (e.type.indexOf("checkbox") == 0)) {
- e.checked = theForm.allbox.checked;
- }
- }
- }
看来只要如此这般写我的table就可达到目的了:
- <t:dataTable id="houses" var="house"
- value="#{houseList.groupHouses}" rows="25" >
- <t:column>
- <f:facet name="header">
- <input type="checkbox" name="allbox" onclick="checkAll(document.getElementById('editHouse'));"/>
- </f:facet>
- <h:selectBooleanCheckbox name="rowCheck"/>
- </t:column>
- <t:column>
- <f:facet name="header">
- <h:outputText value="#{text['portal.home.table.house.title']}" />
- </f:facet>
- <h:outputText value="#{house.name}" escape="true"/>
- </t:column>
- </t:dataTable>
注意table最左边的一列:
- <t:column>
- <f:facet name="header">
- <input type="checkbox" name="allbox" onclick="checkAll(document.getElementById('editHouse'));"/>
- f:facet>
- <h:selectBooleanCheckbox name="rowCheck"/>
- t:column>
这是关键,事先说一下,form的id是"editHouse".
这是摸索了一晚上才找到的办法,希望大家看到后少走弯路.