primefaces数据表选定的行总是相同的值

时间:2014-10-27 18:08:56

标签: jsf primefaces

当我尝试将所选行的id发送到辅助bean时,我有一个带有自定义删除按钮的数据表,但我总是得到相同的值,这是我的代码:

<p:dataTable id="result" var="service" value="#{bean.services}" editable="true"> 
<!--  ajax -->
<p:ajax event="rowEdit" listener="#{bean.onEdit}" update=":form:msg" />
<p:ajax event="rowEditCancel" listener="#{bean.onCancel}" update=":form:msg" />   
.....
<p:column headerText="delete" style="width:100px;">
<p:confirmDialog id="confirmation" message="are u sure?" header="delete item" widgetVar="confirmation" showEffect="fade" hideEffect="explode">
<p:commandButton value="Yes"  onclick="PF('confirmation').hide()" actionListener="#{bean.onDeleteRow}">
<f:setPropertyActionListener target="#{bean.cve}" value="#{service.id.cve}" />
</p:commandButton>  
<p:commandButton value="No" onclick="PF('confirmation').hide()" type="button" />   
</p:confirmDialog>
<p:commandLink id="deleteLink"  onclick="PF('confirmation').show()" styleClass="ui-icon ui-icon-trash"/>                              
</p:column>
</p:dataTable>

这是烘焙豆代码:

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
public class Bean implements Serializable{

private String cve;

...

public void setcve(String cve) {
    this.cve = cve;
}

....    

public void onDeleteRow(){

try {
System.out.println("delete-->" + this.cve );
} catch (Exception e) {
e.printStackTrace();
}

}

}

在标签中,您可以看到我作为参数发送的值,但我总是保留数据的最后一个值......

我做错了什么?

非常感谢您的支持

2 个答案:

答案 0 :(得分:1)

你的代码中还有另一个问题,你对数据表中的每一行都有一个Dialog,这是一个坏主意......你应该保持行上的按钮并设置你想要删除的实体这个按钮和后者只显示对话框,这只是一个......就像这样:同样,将propertyAcionListener更改为删除链接

<p:commandLink id="delete_link" oncomplete="deleteDlg.show();">
    Delete
    <f:setPropertyActionListener value="#{service.id.cve}" target="#{bean.cve}" />
</p:commandLink>

答案 1 :(得分:0)

数据表的选择在哪里?

你的xhtml

<p:dataTable id="result" var="service" value="#{bean.services}" editable="true">

必须是xhtml

<p:dataTable id="result" var="service" value="#{bean.services}" selection="#{bean.selected}" editable="true">

您可以找到数据表选择示例here