【问题标题】:<p:commandButton> referencing <p:contentFlow var="i"> throws javax.el.PropertyNotFoundException: Target Unreachable, identifier 'i' resolved to null<p:commandButton> 引用 <p:contentFlow var="i"> 抛出 javax.el.PropertyNotFoundException: Target Unreachable, identifier 'i' resolve to null
【发布时间】:2015-09-25 19:06:18
【问题描述】:

我在 PrimeFaces 应用程序上不断收到javax.el.PropertyNotFoundException: Target Unreachable, identifier 'i' resolved to null,当我点击应该删除图像的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>

豆子:

public void deleteImage(String i) {
    this.imgFacade.deleteImage(i);
}

我尝试使用&lt;f:param&lt;f:setPropertyActionListener 作为 commandButton 中的i 值,但这些都不起作用。

commandButton 设置为&lt;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> 

&lt;h:inputHidden value="#{i.imageDescription}" 允许动态填充lightbox title="" 属性。

我不这么认为,但是,onClick 事件被覆盖是否会对这个问题产生任何影响?

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    &lt;p:contentFlow&gt;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);
    }
    

    【讨论】:

    • 首先谢谢你。好吧,我已经尝试过这个解决方案,但我重新检查了是否我放错了东西,我仍然得到同样的错误。
    • 我现在看到您已将命令按钮放置在图像中。这将导致无效的 HTML。将它们分开,或者使用命令链接并将图像放在命令链接中。
    • 奇怪的是我之前已经使用了&lt;f:param 几行代码,这非常适合这就是图像的渲染方式。
    • f:param 仅应用于父级。因此,您当前的 f:param 仅应用于图像,而不应用于命令。该命令必须有自己的,完全如答案所示。
    • 点击commandButton时仍然显示错误,即使放在graphicImage之外,我用这些细节更新问题。
    猜你喜欢
    • 2015-06-22
    • 2018-09-21
    • 2023-04-03
    • 1970-01-01
    • 2016-04-13
    • 2016-07-21
    相关资源
    最近更新 更多