Jsf 呈现页面时,将为p:dataTable的每一行处理p:commandLink actionListener

Jsf 呈现页面时,将为p:dataTable的每一行处理p:commandLink actionListener,jsf,datatable,primefaces,actionlistener,commandlink,Jsf,Datatable,Primefaces,Actionlistener,Commandlink,我有一个dataTable,它显示存储在数据库中的数据。其中一列包含一个commandLink(p:commandLink),用于编辑所选行,这很好 我在呈现xhtml页面时遇到问题。似乎commandLink的actionListener属性中的backingBean方法对表中的每一行都进行了处理,但actionListener只应在单击链接时进行处理 这是我的xhtml页面(的一部分): 这不是actionListener的有效方法签名,因此将其视为值表达式 您应该使用操作 <p:co

我有一个dataTable,它显示存储在数据库中的数据。其中一列包含一个commandLink(p:commandLink),用于编辑所选行,这很好

我在呈现xhtml页面时遇到问题。似乎commandLink的actionListener属性中的backingBean方法对表中的每一行都进行了处理,但actionListener只应在单击链接时进行处理

这是我的xhtml页面(的一部分):


这不是
actionListener
的有效方法签名,因此
将其视为值表达式

您应该使用
操作

<p:commandLink id="lnkItemUpdate" value="Edit"
    onstart="document.getElementById('divUpdateItem').style.display = 'block';"
    action="#{myBean.updateItemAction(item)}" update=":formUpdateItem" />
有效的
actionListener
方法签名将是采用
javax.faces.event.ActionEvent
参数的
void
方法:

public void actionListener(ActionEvent event) {
    // ...
}
另见:
<p:commandLink id="lnkItemUpdate" value="Edit"
    onstart="document.getElementById('divUpdateItem').style.display = 'block';"
    action="#{myBean.updateItemAction(item)}" update=":formUpdateItem" />
public void updateItemAction(Entity item) {
    this.setId(item.getId());
    this.setName(item.getName());
    this.setValue(item.getValue());
}
public void actionListener(ActionEvent event) {
    // ...
}