@Test public void bug56185() { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); TesterBeanC beanC = new TesterBeanC(); ValueExpression var = factory.createValueExpression(beanC, TesterBeanC.class); context.getVariableMapper().setVariable("myBean", var); ValueExpression ve = factory.createValueExpression(context, "${(myBean.int1 > 1 and myBean.myBool) or "+ "((myBean.myBool or myBean.myBool1) and myBean.int1 > 1)}", Boolean.class); assertEquals(Boolean.FALSE, ve.getValue(context)); beanC.setInt1(2); beanC.setMyBool1(true); assertEquals(Boolean.TRUE, ve.getValue(context)); }
public Expression parseExpression(String expression, Class expectedType, FunctionMapper fMapper ) throws ELException { ExpressionFactory fac = ExpressionFactory.newInstance(); javax.el.ValueExpression expr; ELContextImpl elContext = new ELContextImpl(null); javax.el.FunctionMapper fm = new FunctionMapperWrapper(fMapper); elContext.setFunctionMapper(fm); try { expr = fac.createValueExpression( elContext, expression, expectedType); } catch (javax.el.ELException ex) { throw new ELException(ex); } return new ExpressionImpl(expr, pageContext); }
@Test public void testJavaKeyWordSuffix() { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); TesterBeanA beanA = new TesterBeanA(); beanA.setInt("five"); ValueExpression var = factory.createValueExpression(beanA, TesterBeanA.class); context.getVariableMapper().setVariable("beanA", var); // Should fail Exception e = null; try { factory.createValueExpression(context, "${beanA.int}", String.class); } catch (ELException ele) { e = ele; } assertNotNull(e); }
@Test public void testJavaKeyWordIdentifier() { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); TesterBeanA beanA = new TesterBeanA(); beanA.setInt("five"); ValueExpression var = factory.createValueExpression(beanA, TesterBeanA.class); context.getVariableMapper().setVariable("this", var); // Should fail Exception e = null; try { factory.createValueExpression(context, "${this}", String.class); } catch (ELException ele) { e = ele; } assertNotNull(e); }
private void doTestBug56179(int parenthesesCount, String innerExpr) { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); ValueExpression var = factory.createValueExpression(Boolean.TRUE, Boolean.class); context.getVariableMapper().setVariable("test", var); StringBuilder expr = new StringBuilder(); expr.append("${"); for (int i = 0; i < parenthesesCount; i++) { expr.append("("); } expr.append(innerExpr); for (int i = 0; i < parenthesesCount; i++) { expr.append(")"); } expr.append("}"); ValueExpression ve = factory.createValueExpression( context, expr.toString(), String.class); String result = (String) ve.getValue(context); assertEquals("true", result); }
private void testExpression(String expression, String expected) { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); ValueExpression ve = factory.createValueExpression( context, expression, String.class); String result = (String) ve.getValue(context); assertEquals(expected, result); }
@Test public void testGetValueReference() { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); TesterBeanB beanB = new TesterBeanB(); beanB.setName("Tomcat"); ValueExpression var = factory.createValueExpression(beanB, TesterBeanB.class); context.getVariableMapper().setVariable("beanB", var); ValueExpression ve = factory.createValueExpression( context, "${beanB.name}", String.class); // First check the basics work String result = (String) ve.getValue(context); assertEquals("Tomcat", result); // Now check the value reference ValueReference vr = ve.getValueReference(context); assertNotNull(vr); assertEquals(beanB, vr.getBase()); assertEquals("name", vr.getProperty()); }
@Test public void testBug50105() { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); TesterEnum testEnum = TesterEnum.APPLE; ValueExpression var = factory.createValueExpression(testEnum, TesterEnum.class); context.getVariableMapper().setVariable("testEnum", var); // When coercing an Enum to a String, name() should always be used. ValueExpression ve1 = factory.createValueExpression( context, "${testEnum}", String.class); String result1 = (String) ve1.getValue(context); assertEquals("APPLE", result1); ValueExpression ve2 = factory.createValueExpression( context, "foo${testEnum}bar", String.class); String result2 = (String) ve2.getValue(context); assertEquals("fooAPPLEbar", result2); }
@Test public void testBug51177ObjectMap() { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); Object o1 = "String value"; Object o2 = Integer.valueOf(32); Map<Object,Object> map = new HashMap<Object,Object>(); map.put("key1", o1); map.put("key2", o2); ValueExpression var = factory.createValueExpression(map, Map.class); context.getVariableMapper().setVariable("map", var); ValueExpression ve1 = factory.createValueExpression( context, "${map.key1}", Object.class); ve1.setValue(context, o2); assertEquals(o2, ve1.getValue(context)); ValueExpression ve2 = factory.createValueExpression( context, "${map.key2}", Object.class); ve2.setValue(context, o1); assertEquals(o1, ve2.getValue(context)); }
@Test public void testBug51177ObjectList() { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); Object o1 = "String value"; Object o2 = Integer.valueOf(32); List<Object> list = new ArrayList<Object>(); list.add(0, o1); list.add(1, o2); ValueExpression var = factory.createValueExpression(list, List.class); context.getVariableMapper().setVariable("list", var); ValueExpression ve1 = factory.createValueExpression( context, "${list[0]}", Object.class); ve1.setValue(context, o2); assertEquals(o2, ve1.getValue(context)); ValueExpression ve2 = factory.createValueExpression( context, "${list[1]}", Object.class); ve2.setValue(context, o1); assertEquals(o1, ve2.getValue(context)); }
/** * Test returning an empty list as a bean property. */ @Test public void testBug51544Bean() throws Exception { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); TesterBeanA beanA = new TesterBeanA(); beanA.setValList(Collections.emptyList()); ValueExpression var = factory.createValueExpression(beanA, TesterBeanA.class); context.getVariableMapper().setVariable("beanA", var); ValueExpression ve = factory.createValueExpression( context, "${beanA.valList.size()}", Integer.class); Integer result = (Integer) ve.getValue(context); assertEquals(Integer.valueOf(0), result); }
/** * Test using list directly as variable. */ @Test public void testBug51544Direct() throws Exception { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new ELContextImpl(); List<?> list = Collections.emptyList(); ValueExpression var = factory.createValueExpression(list, List.class); context.getVariableMapper().setVariable("list", var); ValueExpression ve = factory.createValueExpression( context, "${list.size()}", Integer.class); Integer result = (Integer) ve.getValue(context); assertEquals(Integer.valueOf(0), result); }
private static ValueExpression _createValueExpressionFromApplication( String expression, Class<?> expectedType) { ApplicationFactory factory = (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY); if (factory != null) { Application application = factory.getApplication(); if (application != null) { ELContext elContext = _getELContext(application); ExpressionFactory expressionFactory = application.getExpressionFactory(); if (expressionFactory != null) { return expressionFactory.createValueExpression(elContext, expression, expectedType); } } } return null; }
public static Object convertToType(Object value, Class desiredClass) { if (value == null) { return null; } try { ExpressionFactory expFactory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory(); return expFactory.coerceToType(value, desiredClass); } catch (Exception e) { String message = "Cannot coerce " + value.getClass().getName() + " to " + desiredClass.getName(); log.log(Level.SEVERE, message, e); throw new FacesException(message, e); } }
public void actionListener(ActionEvent event) { String value = _actionListener; if (value != null) { FacesContext facesContext = FacesContext.getCurrentInstance(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); ELContext context = facesContext.getELContext(); MethodExpression methodExpression = expressionFactory.createMethodExpression(context, value, Void.TYPE, new Class<?>[] { ActionEvent.class }); methodExpression.invoke(context, new Object[] { event }); } }
public String doAction() { String value = _action; if (value != null) { FacesContext facesContext = FacesContext.getCurrentInstance(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); ELContext context = facesContext.getELContext(); MethodExpression methodExpression = expressionFactory.createMethodExpression(context, value, String.class, new Class<?>[] {}); value = (String) methodExpression.invoke(context, null); } // Post me as the selected Node for the request postSelectedNode(this); return value; }
/** * Gets the value of the node's action property. The action attr value * could be one of 2 things: * 1) An EL expression * 2) An outcome referencing a navigation rule in the faces_config file. * * Since this method is called only when an ItemNode is clicked, the model * is notified that this node is the currently selected node. * * @return String value of the ItemNode's "action" property. */ @Override public String doAction() { String value = _action; if (value != null) { FacesContext facesContext = FacesContext.getCurrentInstance(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); ELContext context = facesContext.getELContext(); MethodExpression methodExpression = expressionFactory.createMethodExpression(context, value, String.class, new Class<?>[] {}); value = (String) methodExpression.invoke(context, null); } // Post me as the selected Node for the request postSelectedNode(this); return value; }
public void actionListener(ActionEvent event) { String value = _actionListener; if (value != null) { FacesContext facesContext = FacesContext.getCurrentInstance(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); ELContext context = facesContext.getELContext(); MethodExpression methodExpression = expressionFactory.createMethodExpression(context, value, Void.TYPE, new Class<?>[] { ActionEvent.class }); methodExpression.invoke(context, new Object[]{ event }); } }
/** * Allow node to validate itself * * @param ef * @param ctx * @throws ELException */ public void validateEL(ExpressionFactory ef, ELContext ctx) throws ELException { if (this.el != null) { // determine exact type ValueExpression ve = ef.createValueExpression(ctx, this.value, String.class); } }
public static MethodExpression getMethodExpression( String expression, PageContext pageContext, FunctionMapper functionMap, Class expectedType, Class[] paramTypes) { ELContextImpl elctxt = (ELContextImpl)pageContext.getELContext(); elctxt.setFunctionMapper(functionMap); ExpressionFactory expFactory = getExpressionFactory(pageContext); return expFactory.createMethodExpression( elctxt, expression, expectedType, paramTypes); }
protected Object evaluateSimpleExpression(String expression, RenderSession session) { if (!expression.startsWith("${")) throw new RuntimeException(expression + " is not a simple EL expression, expected to start with ${"); if (!expression.endsWith("}")) throw new RuntimeException(expression + " is not a simple EL expression, expected to end with }"); ExpressionFactory expressionFactory = elFactory.newExpressionFactory(); ELContext context = new FauxELContext(elFactory.newElContext(), expressionFactory); populateVariables(context, expressionFactory, session); expression = Utils.unescapeHtml(expression); ValueExpression expr = expressionFactory.createValueExpression(context, expression, Object.class); try { Object result = expr.getValue(context); return result; } catch (Exception e) { throw new RuntimeException("Error when evaluating expression '" + expression + "'", e); } }
/** * Get a config value by first looking at ViewRoot attributes, and then for init parameters. * <p> * If a value is found, it is resolved as an EL expression * * * * @param context The current FacesContext * @param key The key to lookup * @return The resolved value or null if not found */ private String getConfigValue(FacesContext context, String key, String defaultValue) { UIViewRoot viewRoot = context.getViewRoot(); Object value = viewRoot.getAttributes().get(key); if (value == null) value = context.getExternalContext().getInitParameter(key); if (value != null) { ELContext elContext = context.getELContext(); ExpressionFactory expressionFactory = context.getApplication().getExpressionFactory(); ValueExpression ve = expressionFactory.createValueExpression(elContext, value.toString(), String.class); return (String) ve.getValue(elContext); } return defaultValue; }
public MethodExpression makeMethodExpression(final String expression, final Class<?> expectedReturnType, final Class<?> ... expectedParamTypes) { MethodExpression methodExpression = null; try { FacesContext fc = getContext(); ExpressionFactory factory = getExpressionFactory(); methodExpression = factory.createMethodExpression( fc.getELContext(), expression, expectedReturnType, expectedParamTypes); return methodExpression; } catch (Exception e) { throw new FacesException("Method expression '" + expression + "' no se puede crear.", e); } }
/** * Retorna una EL expression correspondiente a un metodo. * * @param valueExpression * cadena que representa la expresion. * @param expectedReturnType * clase del tipo que se espera que retorna la expresion * @param expectedParamTypes * clase de los parametros esperados que reciba el metodo * * @return {@link MethodExpression} correspondiente */ public MethodExpression createMethodExpression( final String valueExpression, final Class<?> expectedReturnType, final Class<?> ... expectedParamTypes) { MethodExpression methodExpression = null; try { FacesContext fc = getContext(); ExpressionFactory factory = fc.getApplication() .getExpressionFactory(); methodExpression = factory.createMethodExpression( fc.getELContext(), valueExpression, expectedReturnType, expectedParamTypes); } catch (Exception e) { throw new FacesException("Method expression '" + valueExpression + "' could not be created.", e); } return methodExpression; }