【问题标题】:primefaces datatable selected row always the same valueprimefaces 数据表选定的行总是相同的值
【发布时间】:2014-12-23 00:18:15
【问题描述】:

当我尝试将所选行的 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();
}

}

}

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

我做错了什么?

非常感谢您的支持

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

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

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

    【讨论】:

    • 发生的是复合键(我正在使用 jpa2 作为后端)​​​,所以我以这种方式获得值,问题是每次您选择不同的行service.id.cve 的值总是一样的,我不知道为什么 :(,非常感谢
    • @Mariah 将 setPropertyActionListener 移动到您的
    【解决方案2】:

    数据表的选择在哪里?

    你的 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

    【讨论】:

    • 在这种情况下,我没有选择,因为我只想将我需要的 id 作为参数传递,而不是整个对象,无论如何采纳了你的建议并这样做了: .... 对于后备 bean:private Service selectedService; -- 使用 setter 和 getter,但是当我想访问它时它是 null...
    猜你喜欢
    • 2017-12-14
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2017-05-29
    相关资源
    最近更新 更多