Oracle ADF 12.1.2,Java 1.7,Oracle WebLogic 12.1.2
我面临与af:inlineFrame
组件相关的奇怪问题。尝试在af:popup
组件中的af:inlineFrame
内显示/呈现ADF页面。奇怪的是弹出窗口显示;查看scoped bean的@PostConstruct
方法,调用两次。这意味着bean初始化两次。但是,它需要初始化一次,因为bean将从将要显示在af:inlineFrame
内的页面中引用。
正确的流程必须是:
openPopup()
方法。openPopup()
设置URI然后打开弹出窗口。inlineFrame source
已设置属性,因为它将显示framePage.jspx
。framePage.jspx
代码,发现FrameBean
内有af:outputLabel
FrameBean
,然后调用@PostConstruct
方法。在我的案例中会发生什么:
openPopup()
方法。openPopup()
设置URI打开弹出窗口。inlineFrame source
已设置属性,因为它将显示framePage.jspx
。framePage.jspx
代码,发现FrameBean
内有af:outputLabel
FrameBean
,然后调用@PostConstruct
方法。FrameBean
,然后调用@PostConstruct
方法。Popup位于:
<af:popup id="mainPopup" binding="#{mainBean.mainPopup}">
<af:dialog id="mainDialog">
<af:inlineFrame source="#{mainBean.URI}">
</af:inlineFrame>
</af:dialog>
</af:popup>
通过af:button action="#{mainBean.openPopup}"
显示弹出窗口:
public void openPopup() {
this.setURI("http://localhost:7001/app/framePage.jspx");
RichPopup.PopupHints hints = new RichPopup.PopupHints();
this.getMainPopup().show(hints);
}
framePage.jspx:
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<jsp:directive.page contentType="text/html;charset=UTF-8" />
<f:view>
<af:document title="Frame Demo" id="demoDocument">
<af:form id="demoForm">
<af:outputLabel value="HELLO Common user!"></af:outputLabel>
<af:outputLabel value="#{frameBean.commonId}"> </af:outputLabel>
</af:form>
</af:document>
</f:view>
</jsp:root>
FrameBean:
@ManagedBean
@ViewScoped
public class FrameBean {
private String commonId;
@PostConstruct
public void afterInit() {
}
public String getCommonId() {
return commonId;
}
public void setCommonId(String commonId) {
this.commonId = commonId;
}
}
让FrameBean
@SessionScoped
解决此问题,因为bean与会话保持在一起,但我不想将其保留在会话中。同时在jspx中将source
af:inlineFrame
属性设置为硬编码而不解决问题。
答案 0 :(得分:2)
我不知道如何深入&#39; CDI使用ADF进行了测试,但肯定不是使用ADF最常用的方式 - 至少所有ADF文档都采用旧式方式。我尝试在我的一个项目中启用CDI,但是通过关注此博客我遇到了错误:
http://www.jobinesh.com/2014/08/enabling-cdi-in-adf-applications.html
此外, 你正在使用内联框架,这是另一个未知的领域。从设计最佳实践角度来看,您应该在页面流中思考,因此您可以使用包含framePage.jspx的任务流程打开对话框,而不是使用内联框架。 。更多相关信息,请点击此处:https://blogs.oracle.com/DavidGiammona/entry/task_flow_call_activity_run_as。
我知道这并不直接回答您的问题,请将其作为一般性说明。