我有两个JSF页面(home.jsf和employs.jsf),主页有一个可导航到员工页面的按钮,导航时我在会话范围内存储价值在(托管豆)
public void putSessionAL(ActionEvent actionEvent) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("key","value");
}
public String navigate() {
return "employees";
}
我想根据使用以下groovy表达式在会话中存储的价值从uihints选项卡上更改标签
adf.context.sessionScope.key
并将TrustMode更改为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。
中添加了强大的政策和验证。解决方案的情况如下:
- 在模型层中创建新类,该类别扩展了oracle.jbo.script.exprsecuritypolicy 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源,在启动标签中设置类exprsecuritypolicy属性。
喜欢:
<startup ExprSecurityPolicy="model.CustomExprSecurityPolicy">