You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Paul Benedict (JIRA)" <ji...@apache.org> on 2007/11/13 09:28:35 UTC

[jira] Closed: (STR-2615) if-Variable for any Validator rule

     [ https://issues.apache.org/struts/browse/STR-2615?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Paul Benedict closed STR-2615.
------------------------------

    Resolution: Won't Fix
      Assignee:     (was: Struts Developers)

Closing this issue because it is not solved by enhancing Struts. Please make a ticket in Commons Validator if you wish to use scripting in XML.

> if-Variable for any Validator rule
> ----------------------------------
>
>                 Key: STR-2615
>                 URL: https://issues.apache.org/struts/browse/STR-2615
>             Project: Struts 1
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 1.2.7
>         Environment: Operating System: All
> Platform: All
>            Reporter: Thomas Jacob
>            Priority: Minor
>
> I'm am proposing an extension to the Validator of Struts.
> It adds the feature to declare a variable 'if' in the validation.xml.
> The value of this variable is an EL expression.
> If and only if this EL expression evaluates to true,
> the field's rules are considered.
> The EL expression may contain a number of variables,
> including the current form bean, the property's value,
> and the request, session, and application scopes.
> Using EL, and providing this context, enables a much more
> flexible approach to switching rules on and off dynamically.
> Currently, I am extending the FieldChecks class, calling a
> switching method in each rule's method. A nicer integration
> of my source code would be very much appreciated.
> The implementation uses Commons EL.
> People told be that this contribution is generic enough
> to be part of Struts. Perhaps you get to the same conclusion :-)
> This is the code snippet to switch:
> protected static boolean skipValidation(final Object bean, final ValidatorAction 
> action, final Field field,
> 	final HttpServletRequest request)
> {
> 	Var ifVariable = field.getVar("if");
> 	if (ifVariable == null)
> 	{
> 		return false;
> 	}
> 	String ifExpression = ifVariable.getValue();
> 	ExpressionEvaluator evaluator = new ExpressionEvaluatorImpl();
> 	VariableResolver resolver = new VariableResolver()
> 	{
> 		public Object resolveVariable(String name) throws ELException
> 		{
> 			HttpSession session = request.getSession();
> 			ServletContext context = session.getServletContext();
> 			if (name.equals("form"))
> 			{
> 				return bean;
> 			}
> 			else if (name.equals("requestScope"))
> 			{
> 				Map requestMap = new HashMap(request.getParameterMap());
> 				Enumeration enumeration = request.getAttributeNames();
> 				while (enumeration.hasMoreElements())
> 				{
> 					String attributeName = (String) enumeration.
> nextElement();
> 					Object attributeValue = request.
> getAttribute(attributeName);
> 					requestMap.put(attributeName, attributeValue);
> 				}
> 				return requestMap;
> 			}
> 			else if (name.equals("sessionScope"))
> 			{
> 				Map sessionMap = new HashMap();
> 				Enumeration enumeration = session.getAttributeNames();
> 				while (enumeration.hasMoreElements())
> 				{
> 					String attributeName = (String) enumeration.
> nextElement();
> 					Object attributeValue = session.
> getAttribute(attributeName);
> 					sessionMap.put(attributeName, attributeValue);
> 				}
> 				return sessionMap;
> 			}
> 			else if (name.equals("applicationScope"))
> 			{
> 				Map contextMap = new HashMap();
> 				Enumeration enumeration = context.getAttributeNames();
> 				while (enumeration.hasMoreElements())
> 				{
> 					String attributeName = (String) enumeration.
> nextElement();
> 					Object attributeValue = context.
> getAttribute(attributeName);
> 					contextMap.put(attributeName, attributeValue);
> 				}
> 				return contextMap;
> 			}
> 			else if (name.equals("value"))
> 			{
> 				return ValidatorUtils.getValueAsString(bean, field.
> getProperty());
> 			}
> 			else
> 			{
> 				Object bean = request.getAttribute(name);
> 				if (bean != null)
> 				{
> 					return bean;
> 				}
> 				bean = session.getAttribute(name);
> 				if (bean != null)
> 				{
> 					return bean;
> 				}
> 				return context.getAttribute(name);
> 			}
> 		}
> 	};
> 	try
> 	{
> 		Boolean result = (Boolean) evaluator.evaluate("${" + ifVariable.
> getValue() + "}", Boolean.class, resolver,
> 			null);
> 		return result != null && !result.booleanValue();
> 	}
> 	catch (ELException exception)
> 	{
> 		throw new IllegalArgumentException("Invalid validator 'if' EL 
> expression '" + ifExpression + "': " + exception);
> 	}
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.