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

时间:2017-09-25 16:48:13

标签: jsf oracle-adf session-scope

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

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

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

我想根据使用以下groovy表达式存储在会话中的值,从UIHints选项卡更改员工viewObject中的Label

adf.context.sessionScope.key

并将trustMode更改为trusted,但会触发以下异常

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)

2 个答案:

答案 0 :(得分:1)

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

  • 在您的VO中,转到java选项卡并添加RowImpl java类
  • 在VORowImpl中添加以下功能

    adf.object.getMySessionLabel()
    
  • 在Label中添加以下EL表达式:

            #{adf.context.sessionScope.key}
    

如果你想做的不仅仅是从会话中获取,那么这种技术可以让你比纯粹的EL更有控制力。在你的情况下,正如你所做的那样,纯EL应该也能正常工作。 (需要检查你的错误,也许只是错过了

$ogfilename = $_FILES['uploaded_file']['name'][$i];

答案 1 :(得分:1)

如果您尝试从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属性。

  4. 喜欢:

    <startup ExprSecurityPolicy="model.CustomExprSecurityPolicy">