我发布了很多谷歌搜索和很多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,我不知道为什么。
答案 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());