繁体   English   中英

使用存储在会话中的值更改标签值

[英]change label value using value stored at session

我有两个jsf页面(home.jsf和employees.jsf),主页有一个导航到员工页面的按钮,同时导航我将值存储在(托管bean)的会话范围内

    public void putSessionAL(ActionEvent actionEvent) {
    FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("key","value");
}

public String navigate() {
    return "employees";
}

我想根据会话中存储的值使用以下常规表达式更改 UIHints 选项卡中员工 viewObject 中的标签

adf.context.sessionScope.key

并将 trustMode 更改为受信任,但会触发以下异常

oracle.jbo.script.ExprScriptException: JBO-29114 ADFContext is not setup to process messages for this exception. Use the exception stack trace and error code to investigate the root cause of this exception. Root cause error code is JBO-25188. Error message parameters are {0=Employees.FirstName, 1=, 2=oracle.jbo.script.ExprSecurityException}
at oracle.jbo.script.ExprScriptException.throwException(ExprScriptException.java:316)
at oracle.jbo.script.ExprScriptException.throwExceptionWithExprDef(ExprScriptException.java:387)
at oracle.jbo.ExprEval.processScriptException(ExprEval.java:599)
at oracle.jbo.ExprEval.doEvaluate(ExprEval.java:697)
at oracle.jbo.ExprEval.evaluate(ExprEval.java:508)
at oracle.jbo.ExprEval.evaluate(ExprEval.java:487)
at oracle.jbo.common.NamedObjectImpl.resolvePropertyRaw(NamedObjectImpl.java:680)
at oracle.jbo.server.DefObject.resolvePropertyRaw(DefObject.java:366)

在 VO UIHint 属性标签级别执行此操作的一种方法将通过以下方式以编程方式执行:

  • 在您的 VO 中,转到 java 选项卡并添加 RowImpl java 类
  • 在VORowImpl中添加如下函数

    public String getMySessionLabel() { return (String)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("key"); }
  • 在标签中添加以下 EL 表达式:

     adf.object.getMySessionLabel()

例如,如果您想做的不仅仅是从会话中获取,则此技术允许您比纯 EL 进行更多的控制。 在您的情况下,纯 EL 也应该像您一样工作。 (需要检查你的有什么问题,也许只是错过了

        #{adf.context.sessionScope.key}

如果您尝试从 viewRowImpl 中的方法获取标签。 所以这将至少为每一行执行一次。 我认为此解决方案不适合您的情况。

无论如何,ADF 作为框架在 EL 中添加了强大的策略和验证,尤其是在 12.2.x 版中。

您的情况的解决方案如下:

  1. 在扩展 oracle.jbo.script.ExprSecurityPolicy 类的模型层中创建新类
  2. 覆盖 checkProperty 方法。

     @Override public boolean checkProperty(Object object, String string, Boolean b) { if (object.getClass().getName().equals("oracle.adf.share.http.ServletADFContext") && string.equals("sessionScope")) { return true; } return super.checkProperty(object, string, b); }
  3. 打开 adf-config.xml 源代码并在启动标记中设置您的类 ExprSecurityPolicy 属性。

喜欢:

<startup ExprSecurityPolicy="model.CustomExprSecurityPolicy">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM