You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2024/03/19 16:55:09 UTC
(myfaces) branch main updated: MYFACES-4655 fix resolving of FacesValidators without value (#682) (#686)
This is an automated email from the ASF dual-hosted git repository.
tandraschko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces.git
The following commit(s) were added to refs/heads/main by this push:
new c9292a215 MYFACES-4655 fix resolving of FacesValidators without value (#682) (#686)
c9292a215 is described below
commit c9292a215481690825dce7ff9d4116db8dea0e9f
Author: Nicola Isotta <ni...@gmail.com>
AuthorDate: Tue Mar 19 17:55:02 2024 +0100
MYFACES-4655 fix resolving of FacesValidators without value (#682) (#686)
---
.../java/org/apache/myfaces/cdi/util/CDIUtils.java | 50 ++++++++++++++++------
.../cdi/wrapper/FacesValidatorCDIWrapper.java | 13 +++++-
2 files changed, 49 insertions(+), 14 deletions(-)
diff --git a/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java b/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
index ad0177bbd..93975ef16 100644
--- a/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
@@ -18,21 +18,24 @@
*/
package org.apache.myfaces.cdi.util;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collections;
-import java.util.Set;
import jakarta.enterprise.context.ContextNotActiveException;
import jakarta.enterprise.context.RequestScoped;
import jakarta.enterprise.context.SessionScoped;
import jakarta.enterprise.context.spi.Context;
-
import jakarta.enterprise.context.spi.CreationalContext;
import jakarta.enterprise.inject.spi.Bean;
import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.faces.context.ExternalContext;
import jakarta.faces.context.FacesContext;
import jakarta.faces.view.ViewScoped;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
import org.apache.myfaces.webapp.FacesInitializerImpl;
/**
@@ -65,7 +68,7 @@ public class CDIUtils
}
return resolveInstance(bm, beans, clazz);
}
-
+
private static <T> T resolveInstance(BeanManager bm, Set<Bean<?>> beans, Type type)
{
Bean<?> bean = bm.resolve(beans);
@@ -74,7 +77,7 @@ public class CDIUtils
return instance;
}
-
+
@SuppressWarnings("unchecked")
public static <T> Bean<T> get(BeanManager beanManager, Class<T> beanClass, Annotation... qualifiers)
{
@@ -106,10 +109,22 @@ public class CDIUtils
}
public static <T> T get(BeanManager beanManager, Type type, boolean create, Annotation... qualifiers)
+ {
+ return get(beanManager, type, create, null, qualifiers);
+ }
+
+ public static <T> T get(BeanManager beanManager, Type type, boolean create,
+ String beanName, Annotation... qualifiers)
{
try
{
Set<Bean<?>> beans = beanManager.getBeans(type, qualifiers);
+ if (beanName != null)
+ {
+ beans = beans.stream()
+ .filter(bean -> Objects.equals(beanName, getBeanName(bean)))
+ .collect(Collectors.toSet());
+ }
Bean<T> bean = (Bean<T>) beanManager.resolve(beans);
return bean == null ? null : get(beanManager, bean, type, create);
@@ -120,6 +135,17 @@ public class CDIUtils
}
}
+ private static String getBeanName(Bean<?> bean)
+ {
+ String name = bean.getName();
+ if (name != null)
+ {
+ return name;
+ }
+ String className = bean.getBeanClass().getSimpleName();
+ return Character.toLowerCase(className.charAt(0)) + className.substring(1);
+ }
+
public static <T> T get(BeanManager beanManager, Bean<T> bean, Type type, boolean create)
{
if (create)
@@ -133,7 +159,7 @@ public class CDIUtils
return context.get(bean);
}
}
-
+
public static boolean isSessionScopeActive(BeanManager beanManager)
{
try
@@ -153,7 +179,7 @@ public class CDIUtils
}
return false;
}
-
+
public static boolean isRequestScopeActive(BeanManager beanManager)
{
try
@@ -171,7 +197,7 @@ public class CDIUtils
}
return false;
}
-
+
public static boolean isViewScopeActive(BeanManager beanManager)
{
try
@@ -191,5 +217,5 @@ public class CDIUtils
}
return false;
}
-
-}
\ No newline at end of file
+
+}
diff --git a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
index 465e907ea..3cf93e372 100644
--- a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
+++ b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
@@ -39,7 +39,7 @@ public class FacesValidatorCDIWrapper implements PartialStateHolder, Validator,
}.getType();
private transient Validator delegate;
-
+
private String validatorId;
private boolean _transient;
private boolean _initialStateMarked = false;
@@ -72,10 +72,19 @@ public class FacesValidatorCDIWrapper implements PartialStateHolder, Validator,
{
delegate = CDIUtils.get(bm, Validator.class, true, literal);
}
+ if (delegate == null)
+ {
+ literal = FacesValidator.Literal.of("", false, true);
+ delegate = CDIUtils.get(bm, VALIDATOR_TYPE, true, validatorId, literal);
+ }
+ if (delegate == null)
+ {
+ delegate = CDIUtils.get(bm, Validator.class, true, validatorId, literal);
+ }
}
return delegate;
}
-
+
@Override
public Object saveState(FacesContext context)
{