af:图像不令人耳目一新

时间:2015-02-11 11:48:49

标签: jsf jsf-2 oracle-adf

我发布了很多谷歌搜索和很多af:image组件的实验后发布这个问题。

我的情况如下:

我有一个af:链接打开一个af:来自支持bean的弹出窗口,如下所示:

<af:link text="Link" id="l3" 
           actionListener="#{myBean.myActionListener}">
    <f:attribute name="personId" value="#{row.PersonId}"/>
    <f:attribute name="fullName" value="#{row.FullName}"/>
  </af:link>

和myActionListener方法如下:

public void myActionListener(ActionEvent actionEvent) {

    if (actionEvent.getComponent().getAttributes().get("personId") != null) {

        Long personId = (Long) actionEvent.getComponent().getAttributes().get("personId");
        String fullName = (String)actionEvent.getComponent().getAttributes().get("fullName");


        // puting the attributes in the page Flow Scope 
        AdfFacesContext.getCurrentInstance().getPageFlowScope().put("currentPersonId", currentPersonId);
        AdfFacesContext.getCurrentInstance().getPageFlowScope().put("currentFullName", currentFullName);

        String imageUrl = "/myImageServlet?personId="+personId ;
        AdfFacesContext.getCurrentInstance().getPageFlowScope().put("imageUrl", imageUrl);


       // check  if the image is stored in the file system 
        String fileLocation = "C:\\pics\\" ;

        File imageFile = new File(fileLocation + personId);
        if(imageFile.exists()){
            AdfFacesContext.getCurrentInstance().getPageFlowScope().put("personImageExist", true); 
        }else {
    AdfFacesContext.getCurrentInstance().getPageFlowScope().put("personImageExist", false); 
        }

        //show the popup here 
        RichPopup.PopupHints hints = new RichPopup.PopupHints();
        this.getImagePopupTab2().show(hints);

    }
}

然后我的弹出窗口显示af:image,如下所示:

<af:popup childCreation="immediate" autoCancel="disabled" id="imagePopupTab2"
    binding="#{myBean.imagePopupTab2}" contentDelivery="lazyUncached">
        <af:dialog id="d123456" closeIconVisible="false">
        <af:panelGroupLayout id="pgl899" layout="vertical">
            <af:panelGroupLayout id="pgl1110" layout="horizontal">
            <af:spacer width="20" height="10" id="s34"/>
            <af:image source="#{pageFlowScope.imageUrl}"
                  id="i222" rendered="#{pageFlowScope.personImageExist}"
                 />
            </af:panelGroupLayout>

        </af:panelGroupLayout>
        </af:dialog>
</af:popup>

以下情况很好,当我尝试更新文件系统中的图像文件时,我的问题来了,然后再次调用弹出窗口,t 旧图像仍然缓存在那里,并且它不会刷新

我尝试过以下解决方案但它没有用:

1-添加更新后刷新 af:image 的部分触发器。

2-添加部分触发器以 af:image 父布局进行刷新。

3-我试图从支持bean内部将source属性设置为 af:image

4-我也尝试了 h:graphicImage tr:image 同样的事情。

问题是, af:image 没有再次调用源Servlet,我不知道为什么。

2 个答案:

答案 0 :(得分:1)

刷新前后的servlet URL是否相同?如果是这样,请尝试向URL添加一个参数,以便在刷新后使其不同。

例如:

/imageservlet?id=302201&refreshTrigger=1

简要介绍&#34;要点&#34;这blog post

答案 1 :(得分:0)

尝试将af:image&binding绑定到支持bean:

<af:image binding="#{myBean.imageComp" source="#{pageFlowScope.imageUrl}"
                  id="i222" rendered="#{pageFlowScope.personImageExist}"
                 />

在myActionListener方法中,执行一个程序化的PPR:

AdfFacesContext.getCurrentInstance().addPartialTarget(getImageComp());