<p:commandbutton> referencing <p:contentflow var =“i”> throws javax.el.PropertyNotFoundException:Target Unreachable,identifier&#39; i&#39;已解决为空

时间:2015-07-08 03:30:55

标签: jsf primefaces

当我点击应该删除图片的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被覆盖的事件是否会对此问题产生影响?

1 个答案:

答案 0 :(得分:2)

<p:contentFlow>notUIData组件。因此,在组件树访问期间(在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);
}