删除选定的行数据表

时间:2016-02-17 04:15:14

标签: jsf primefaces

我有以下代码从p:datatable

中删除选定的行
<p:commandLink id="deleteProp" action="#{locationBean.deleteProperty}" styleClass="datatabletext" update="locationProperties" process="@this">
 <h:graphicImage value="/resources/images/delete.gif" />
 <f:setPropertyActionListener target="#{locationBean.selectedProperty}" value="locProp" />
</p:commandLink>

Bean代码

public void deleteProperty() {
    System.out.println("selec  "+selectedProperty);
    locProps.remove(selectedProperty);
}

我也为selectedProperty设置了getter和setter。但是当我点击删除链接时,我看到以下错误。

WARNING: Cannot convert locProp of type class java.lang.String to class TO.LocationPropertiesTO
javax.el.ELException: Cannot convert locProp of type class java.lang.String to class TO.LocationPropertiesTO
at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:416)

它甚至没有进入动作方法。任何人都可以让我知道我在做什么错误吗?

当我将参数传递给delete方法并检查它是否正常工作时。但是为什么f:setPropertyActionListener失败了?

工作代码

  <p:commandLink id="deleteProp" rendered="#{fn:length(locationBean.locProps)>1}"
                                    action="#{locationBean.deleteProperty(locProp)}"
                                    styleClass="datatabletext" update="locationProperties"
                                    process="@this">
                                    <h:graphicImage value="/resources/images/delete.gif" />

</p:commandLink>

2 个答案:

答案 0 :(得分:2)

我认为这与PropertyActionListener中缺少的EL标签有关。

尝试使用:

<f:setPropertyActionListener target="#{locationBean.selectedProperty}" value="#{locProp}" />

这就是ELException抱怨尝试将String值解析为自定义POJO(解析String“locProp”)的原因。

答案 1 :(得分:0)

您可以按照以下方式执行此操作:

首先,将所选行的ID传递给Bean,如下所示:

<p:commandLink id="deleteProp" action="#{locationBean.deleteProperty}" styleClass="datatabletext" update="locationProperties" process="@this">
 <h:graphicImage value="/resources/images/delete.gif" />
 <f:setPropertyActionListener target="#{locationBean.selectedProperty}" value="locProp" />
<f:param name="deletingRowId" value="#{row.id}" />
</p:commandLink>

您的DataTable中的行是var。

<p:dataTable ... var="row" ... />

然后,在您的deleteProperty()方法中,按照已通过的ID查找您的LocationPropertiesTO对象,如下所示:

Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String id = params.get("deletingRowId");
LocationPropertiesTO lo = findLObyId(id, locProps);
locProps.remove(selectedProperty);

最后,更新您的数据表。