我有一个简单的冰:dataTable有2列,一列是动作列,另一列是表示正则表达式的字符串。 action列的标题是add动作,每行都有一个remove动作。只要它确实如此,我真的不关心它是如何工作的。现在我正在尝试模仿icefaces复合组件editableTable,它要求您选择一行,此时为该行呈现操作,然后单击一个应用于所选行的操作。因此,在我尝试使这项工作时,我创建了一个简单的数据表,其中包含一个rowSelector,用于为所选行设置我的item.selected:
<ice:dataTable value="#{configuration.selectedTagPositiveRegexes}"
var="item">
<ice:column>
<ice:rowSelector value="#{item.selected}" />
<f:facet name="header">
<ice:commandLink styleClass="linkBlue"
action="#{configuration.tagRegexAdd}">
<ice:outputText value="Add" />
</ice:commandLink>
</f:facet>
<ice:commandLink styleClass="linkBlue"
action="#{configuration.tagRegexRemove}"
rendered="#{item.selected}">
<ice:outputText value="Remove" />
</ice:commandLink>
</ice:column>
<ice:column>
<f:facet name="header">
<ice:outputText value="Regular Expression" />
</f:facet>
<ice:inputText value="#{item.object}" size="100" />
</ice:column>
</ice:dataTable>
然后在我的支持bean中,我有以下两种方法:
public void tagRegexAdd() {
log.debug( "add a new regex" );
for ( SelectableRow<String> row : selectedTagPositiveRegexes ) {
row.selected = false;
}
selectedTagPositiveRegexes.add( 0, new SelectableRow<String>( "", true ) );
}
public void tagRegexRemove() {
log.debug( "remove an existing regex" );
int i = 0;
int selectedIndex = -1;
for ( SelectableRow<String> row : selectedTagPositiveRegexes ) {
if ( row.selected ) {
selectedIndex = i;
row.selected = false;
}
i++;
}
if ( selectedIndex >= 0 ) {
selectedTagPositiveRegexes.remove( selectedIndex );
}
}
当我单步执行此代码时,我注意到的是,当单击删除操作时,selectedTagPositiveRegexes的getter被调用3次,然后是实际的remove方法,然后再向getter调用1次,此时浏览器收到一个做我想要的回应。但是,某些事件必须已被某些事件排队,因为在返回响应之后,getter会再被调用3次,之后删除该项之后的项目将被删除的项目替换。我不知道这里发生了什么,并且必须对如何使用它有严重的误解,但我的假设是由元素列表支持的数据表应该从该列表中获取其内容。这样,如果我在列表中添加或删除,数据表应该代表新状态。但在这个假设中,我似乎非常错误。任何有关如何实际工作的见解将不胜感激。
答案 0 :(得分:0)
我没有这样试过,但这对我有用。
在托管bean中,创建一个HtmlDataTable类型的属性,然后使用ice:dataTable的binding属性指向它。现在在回调中,执行以下操作:
RowClass row=(RowClass)htmlTable.getRowData();
rowList.remove(row);
在某些情况下,我必须运行它才能使其正确更新。我相信只有你有嵌套表:
htmlTable.getChildren().clear();
答案 1 :(得分:0)
尝试向数据表添加绑定,可以是(org.icefaces.ace.component.datatable.DataTable)或(HtmlDatatable)
代码将是
<ice:dataTable value="#{configuration.selectedTagPositiveRegexes}"
var="item" binding="#{configuration.tabla}">
和bean:
private HtmlDatatable tabla;
public void tagRegexRemove() {
objectClass ob = (objectClass) this.tabla.getRowData();
this.selectedTagPositiveRegexes.remove(ob);
}