我有以下代码从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>
答案 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);
最后,更新您的数据表。