Primefaces:动态内容刷新问题

3

我有一个Web应用程序,可以选择要删除的一些内容。弹出模态窗口显示所选图像/flash的预览。我点击一个按钮,一切正常。但是,当我选择另一个要删除的内容时,弹出模态框并在微秒内显示先前删除的文件,然后被我想要删除的新内容替换。

显示动态内容的代码如下:

对于图像:

<p:graphicImage value="#{controller.tempImage}" height="110" 
    id="imageID" />

对于Flash:

<p:media value="#{controller.tempImage}" width="110" height="110" 
    id="imageID" player="flash" /> 

控制器:

public StreamedContent getTempImage() {
    try {
        FacesContext context = FacesContext.getCurrentInstance();

        if (context.getRenderResponse() ) {
            return new DefaultStreamedContent();
        }
        else {              
                tempImage = new DefaultStreamedContent(new FileInputStream("pathToFile"), "image/jpeg");                
        }
    } catch (FileNotFoundException e) {
        tempImage = new DefaultStreamedContent();
    }

    return tempImage;
}

我尝试在加载前将tempImage设置为null以及在模态框中设置autoUpdate=true,但没有成功。 删除按钮(显示删除模态框的按钮):
<p:commandButton id="btnDelete" value="Delete" onclick="deleteModal.show();"  actionListener="#{controller.initDelete}" update=":deleteForm">                                       

删除表单(XHTML):

<h:form  id="deleteForm" enctype="multipart/form-data" >
<p:dialog id="deleteDialog" widgetVar="deleteModal" modal="true" resizable="false" draggable="false" autoUpdate="true">
        <p:outputPanel autoUpdate="false" >
            <p:panelGrid id="panelId">
                <p:row>                 
                    <p:column>
                        <p:panelGrid id="bannerPanel">

                            <p:row>
                                <p:column>
                                 <p:graphicImage value="#{controller.tempImage}" height="110" id="imageID" />
                                </p:column>
                            </p:row>    

                        </p:panelGrid>
                    </p:column>
                </p:row>

                <f:facet name="footer">
                    <p:row>
                        <p:column>  
                                <p:commandButton id="doDeleteBtn" value="Delete"
                                     actionListener="#{controller.delete}" >                                                        
                                </p:commandButton>
                        </p:column>
                    </p:row>
                </f:facet>
            </p:panelGrid>
        </p:outputPanel>
</p:dialog>            


你能展示一下那个按钮的代码吗? - partlov
看到更多的代码会很有帮助……也许是显示对话框和对话框本身(xhtml)以及删除内容的方法(bean)的按钮。 - Andre
1个回答

4

改为:

onclick="deleteModal.show();"

to:

oncomplete="deleteModal.show();"

这将确保在AJAX请求完成后而不是请求开始前查看对话框。
当您创建所谓的“推送按钮”即具有"type =“button”"属性且只需执行一些JavaScript代码的按钮时,您应该使用onclick。默认情况下,Primefaces中按钮的类型为submit

没错,就这样了。再次感谢你的帮助 :P。你非常有帮助。 - CountD
顺便问一下(我不知道是否可以在这里问)... 我经常收到警告 JSF1091 No mime type could be found for file dynamiccontent,我已经按照这里发布的一些教程和一些PF论坛上的帖子进行了跟进,但是没有任何改变。你有关于这个问题的任何想法吗?它似乎很普遍,但我无法摆脱它。 - CountD
@partlov,你真快!;) - Andre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接