使用存储在会话中的值更改标签值
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";
}
我想根据会话中存储的值使用以下 groovy 表达式
从 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 class
在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。
您的情况解决方案如下:
- 在扩展 oracle.jbo.script.ExprSecurityPolicy class
的模型层中新建 class
覆盖 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);
}
打开 adf-config.xml 源并在启动标签中设置您的 class ExprSecurityPolicy 属性。
赞:
<startup ExprSecurityPolicy="model.CustomExprSecurityPolicy">
我有两个 jsf 页面(home.jsf 和 employees.jsf), 主页有一个导航到员工页面的按钮, 导航时我将值存储在会话范围内 在(托管 bean)
public void putSessionAL(ActionEvent actionEvent) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("key","value");
}
public String navigate() {
return "employees";
}
我想根据会话中存储的值使用以下 groovy 表达式
从 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 class
在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。
您的情况解决方案如下:
- 在扩展 oracle.jbo.script.ExprSecurityPolicy class 的模型层中新建 class
覆盖 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); }
打开 adf-config.xml 源并在启动标签中设置您的 class ExprSecurityPolicy 属性。
赞:
<startup ExprSecurityPolicy="model.CustomExprSecurityPolicy">