From c3ba766e36c7e92c1a6f506601d09476b55327b8 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Mon, 11 Aug 2008 17:21:08 +0000 Subject: [PATCH] null check; parser fix --- ...owBuilderServicesBeanDefinitionParser.java | 54 +++++++++++++------ .../faces/webflow/FlowActionListener.java | 6 ++- ...owBuilderServicesBeanDefinitionParser.java | 7 ++- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java b/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java index 6e0d4c08..45bd6017 100644 --- a/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java +++ b/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java @@ -42,14 +42,8 @@ public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingle } protected void doParse(Element element, BeanDefinitionBuilder definitionBuilder) { - boolean enableManagedBeans = parseEnableManagedBeans(element, definitionBuilder); - if (enableManagedBeans) { - definitionBuilder.addPropertyValue("expressionParser", new JsfManagedBeanAwareELExpressionParser( - DefaultExpressionFactoryUtils.createExpressionFactory())); - } else { - parseExpressionParser(element, definitionBuilder); - } parseConversionService(element, definitionBuilder); + parseExpressionParser(element, definitionBuilder, parseEnableManagedBeans(element, definitionBuilder)); parseViewFactoryCreator(element, definitionBuilder); } @@ -80,26 +74,52 @@ public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingle } } - private void parseExpressionParser(Element element, BeanDefinitionBuilder definitionBuilder) { - String expressionParser = element.getAttribute("expression-parser"); - if (StringUtils.hasText(expressionParser)) { - definitionBuilder.addPropertyReference("expressionParser", expressionParser); - } else { - Object value = definitionBuilder.getBeanDefinition().getPropertyValues().getPropertyValue( - "conversionService"); + private void parseExpressionParser(Element element, BeanDefinitionBuilder definitionBuilder, + boolean enableManagedBeans) { + if (enableManagedBeans) { + if (StringUtils.hasText(element.getAttribute("expression-parser"))) { + throw new IllegalStateException( + "Do not specify a custom expression-parser when enable-managed-beans is true"); + } + Object value = getConversionServiceValue(definitionBuilder); if (value instanceof RuntimeBeanReference) { BeanDefinitionBuilder builder = BeanDefinitionBuilder - .genericBeanDefinition(WebFlowELExpressionParser.class); + .genericBeanDefinition(JsfManagedBeanAwareELExpressionParser.class); builder.addConstructorArgValue(DefaultExpressionFactoryUtils.createExpressionFactory()); builder.addPropertyValue("conversionService", value); definitionBuilder.addPropertyValue("expressionParser", builder.getBeanDefinition()); } else { ConversionService conversionService = (ConversionService) value; - WebFlowELExpressionParser elExpressionParser = new WebFlowELExpressionParser( + JsfManagedBeanAwareELExpressionParser elExpressionParser = new JsfManagedBeanAwareELExpressionParser( DefaultExpressionFactoryUtils.createExpressionFactory()); elExpressionParser.setConversionService(conversionService); definitionBuilder.addPropertyValue("expressionParser", elExpressionParser); } + } else { + String expressionParser = element.getAttribute("expression-parser"); + if (StringUtils.hasText(expressionParser)) { + definitionBuilder.addPropertyReference("expressionParser", expressionParser); + } else { + Object value = getConversionServiceValue(definitionBuilder); + if (value instanceof RuntimeBeanReference) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder + .genericBeanDefinition(WebFlowELExpressionParser.class); + builder.addConstructorArgValue(DefaultExpressionFactoryUtils.createExpressionFactory()); + builder.addPropertyValue("conversionService", value); + definitionBuilder.addPropertyValue("expressionParser", builder.getBeanDefinition()); + } else if (value instanceof ConversionService) { + ConversionService conversionService = (ConversionService) value; + WebFlowELExpressionParser elExpressionParser = new WebFlowELExpressionParser( + DefaultExpressionFactoryUtils.createExpressionFactory()); + elExpressionParser.setConversionService(conversionService); + definitionBuilder.addPropertyValue("expressionParser", elExpressionParser); + } + } } } -} + + private Object getConversionServiceValue(BeanDefinitionBuilder definitionBuilder) { + return definitionBuilder.getBeanDefinition().getPropertyValues().getPropertyValue("conversionService") + .getValue(); + } +} \ No newline at end of file diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java index 6967214a..c1cbfc07 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java @@ -176,8 +176,10 @@ public class FlowActionListener implements ActionListener { validateMethod = ReflectionUtils.findMethod(validator.getClass(), validateMethodName, new Class[] { model.getClass(), Errors.class }); if (validateMethod != null) { - ReflectionUtils.invokeMethod(validateMethod, validator, new Object[] { model, - new MessageContextErrors(requestContext.getMessageContext()) }); + String objectName = getModelExpression(requestContext).getExpressionString(); + MessageContextErrors errors = new MessageContextErrors(requestContext.getMessageContext(), + objectName, model, null, null); + ReflectionUtils.invokeMethod(validateMethod, validator, new Object[] { model, errors }); } } } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java index e03427c3..15b46b7e 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java @@ -59,8 +59,7 @@ class FlowBuilderServicesBeanDefinitionParser extends AbstractSingleBeanDefiniti if (StringUtils.hasText(expressionParser)) { definitionBuilder.addPropertyReference("expressionParser", expressionParser); } else { - Object value = definitionBuilder.getBeanDefinition().getPropertyValues().getPropertyValue( - "converisonService"); + Object value = getConversionServiceValue(definitionBuilder); if (value instanceof RuntimeBeanReference) { BeanDefinitionBuilder builder = BeanDefinitionBuilder .genericBeanDefinition(DefaultExpressionParserFactory.class); @@ -85,4 +84,8 @@ class FlowBuilderServicesBeanDefinitionParser extends AbstractSingleBeanDefiniti } } + private Object getConversionServiceValue(BeanDefinitionBuilder definitionBuilder) { + return definitionBuilder.getBeanDefinition().getPropertyValues().getPropertyValue("conversionService") + .getValue(); + } } \ No newline at end of file