javascript - 如何在 ADF 中以编程方式实现 UncommitedDataWarning?

标签 javascript jsf oracle-adf jdeveloper

ADF 具有此文档属性 (UncommitedDataWarning),当用户想要导航到实际页面中存在未提交日期的另一个页面时,该属性会向用户发出警告。这只是一个警告。我想当用户在对话框中按“确定”时对输入的数据执行回滚。 有谁知道如何实现这一目标?

如果有人有任何想法通过 JSF 和 JavaScript 实现这一点,请告诉我,也许我会找到某种方法来适应它:)。

最佳答案

这是阶段监听器的代码,我用它来检查用户是否已登录 ADF。进行您想要检查的其他更改

import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;

import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import oracle.adf.controller.ControllerContext;
import oracle.adf.controller.faces.lifecycle.JSFLifecycle;
import oracle.adf.controller.v2.lifecycle.PagePhaseEvent;
import oracle.adf.controller.v2.lifecycle.PagePhaseListener;

import view.backing.UserData;


 public class SecurityPagePhaseListener implements PagePhaseListener {
      public static final String LOGIN_VIEW = "/Home";
public static final String LOGOUT_MSG = "You are not logged in";
public static final String PASTE_MSG = "Don't try  to copy and paste URL address :)";
public static final String currentView=FacesContext.getCurrentInstance().getViewRoot().getId();


public static Object resolveExpression(String expression) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Application app = facesContext.getApplication();
    ExpressionFactory elFactory = app.getExpressionFactory();
    ELContext elContext = facesContext.getELContext();
    ValueExpression valueExp = elFactory.createValueExpression(elContext, expression, Object.class);
    return valueExp.getValue(elContext);
}

public void beforePhase(PagePhaseEvent event) {

    if (event.getPhaseId() == JSFLifecycle.INIT_CONTEXT_ID) {

        ControllerContext cc = ControllerContext.getInstance();
        String viewId = cc.getCurrentViewPort().getViewId();
        Boolean protectedView = SecurityUtil.isProtectedPage(viewId);

        /** ------ [ If requested page is protected area ] ----- */
        if (protectedView) {
            UserData ud = (UserData)resolveExpression("#{UserData}");
            Boolean logedIn = ud.getLoggedIn();
            /** ------ [ If user is not logged in ] ----- */
            if (!logedIn) {
                FacesMessage fm = new FacesMessage(LOGOUT_MSG);
                fm.setSeverity(FacesMessage.SEVERITY_ERROR);
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, fm);
               SecurityUtil.displayView(LOGIN_VIEW);
            }


            /** [ If user try to paste direct link to protected page ] */
            if (!SecurityUtil.isViewState()) {
                FacesMessage fm = new FacesMessage(PASTE_MSG);
                fm.setSeverity(FacesMessage.SEVERITY_ERROR);
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, fm);
               SecurityUtil.displayView(LOGIN_VIEW );
            }
        }
    }

}

public void afterPhase(PagePhaseEvent event) {
}

 }

不要忘记在 adf-settings.xml 中注册它,如下所示

 <lifecycle>
  <phase-listener>
    <listener-id>SecurityPagePhaseListener</listener-id>
      <class>security.SecurityPagePhaseListener</class>
  </phase-listener>
</lifecycle>

关于javascript - 如何在 ADF 中以编程方式实现 UncommitedDataWarning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19137208/

相关文章:

javascript - 使用 Javascript 更改文本的颜色

java - 如何在 <h :inputText>? 上应用 CSS

javax.faces.FacesException 。它是属于 Spring Security 3.x 的一个异常(exception)

java - 您可以将 Oracle ADF 与 IntelliJ Idea 结合使用吗?

javascript - 发出 AngularJS $http 请求 POST 时出错

javascript - 正则表达式替换不起作用

java - 动态更改树选择的显示形式

java - 轻量级 WebLogic 开发环境

javascript - 在点击事件上加载谷歌地图 API,标记不显示

jsf - 我在 Tomcat 上的 JSF webapp 转到本地主机