当我点击应该删除图片的javax.el.PropertyNotFoundException: Target Unreachable, identifier 'i' resolved to null
时,我的PrimeFaces应用程序上不断获得commandButton
但我似乎无法找到原因。我检查了this回答,但没有任何问题。当我删除或不点击时,commandButton
应用程序正常运行,var="i"
完全适用于所有其他DOM/PF
元素,因此我可以只是卡在这里
提前谢谢。
这是我的代码:
<h:form>
<div id="visor-imagenes">
<p:contentFlow value="#{imageHandler.personalImgList}"
var="i" id="contentFlow"
styleClass="contentWrapp">
<p:graphicImage value="#{fileUploadMB.image}"
styleClass="content"
onclick="clickFlow(this, event)">
<f:param name="id" value="#{i.id}"/>
<h:inputHidden value="#{i.imageDescription}"/>
<p:commandButton icon="ui-icon-trash"
action="#{imageHandler.deleteImage(i.id)}"
update="contentFlow">
</p:commandButton>
</p:graphicImage>
<div class="caption">#{i.imageName}</div>
</p:contentFlow>
</div>
</h:form>
bean:
public void deleteImage(String i) {
this.imgFacade.deleteImage(i);
}
我尝试使用<f:param
,<f:setPropertyActionListener
作为commandButton中的i
值,但不是这些值有效。
将commandButton
设置为<p:graphicImage
会引发同样的错误:
<p:contentFlow value="#{fileUploadMB.personalImgList}" var="i" id="contentFlow" styleClass="contentWrapp">
<p:commandButton icon="ui-icon-trash"
action="#{fileUploadMB.deleteImage}"
update="contentFlow">
<f:param name="id" value="#{i.id}"/>
</p:commandButton>
<p:graphicImage value="#{fileUploadMB.image}" styleClass="content" onclick="clickFlow(this, event)">
<f:param name="id" value="#{i.id}"/>
<h:inputHidden value="#{i.imageDescription}"/>
</p:graphicImage>
<div class="caption">#{i.imageName}</div>
</p:contentFlow>
另外,我已完成覆盖图片的onClick
事件,因为默认点击重定向到图片文件。
<script>
function clickFlow(item, e) {
if ($(item).parent().hasClass('active')) {
e.stopImmediatePropagation();
var text = $(item).siblings("input[type=hidden]").attr('value');
$('.image-linker:first-child').attr('href', $(item).attr('src'));
$('.image-linker:first-child').attr('title', text);
$('.image-lightboxer:first-child').attr('src', $(item).attr('src'));
$('.image-linker:first-child').click();
}
}
</script>
<h:inputHidden value="#{i.imageDescription}"
允许以dinamically方式填充lightbox title=""
属性。
我不这么认为,但onClick
被覆盖的事件是否会对此问题产生影响?
答案 0 :(得分:2)
<p:contentFlow>
是not和UIData
组件。因此,在组件树访问期间(在UICommand
组件的解码期间需要),它不能保存和恢复迭代状态。您基本上需要在渲染响应期间将图像的唯一标识符打印为HTTP请求参数。
<p:commandButton icon="ui-icon-trash"
action="#{imageHandler.deleteImage}"
update="contentFlow">
<f:param name="id" value="#{i.id}"/>
</p:commandButton>
public void deleteImage() {
String i = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
this.imgFacade.deleteImage(i);
}