Okay, I'll continue talking to myself - may be somebody will find my posts useful later 
I researched the problem and found it is raised in the org.springframework.webflow.mvc.view.AbstractMvcVi ew class.
there is the method:
Code:
private void addModelBindingMappings(DefaultMapper mapper, Set parameterNames, Object model) {
Iterator it = binderConfiguration.getBindings().iterator();
while (it.hasNext()) {
Binding binding = (Binding) it.next();
String parameterName = binding.getProperty();
if (parameterNames.contains(parameterName)) {
addMapping(mapper, binding, model);
} else {
if (fieldMarkerPrefix != null && parameterNames.contains(fieldMarkerPrefix + parameterName)) {
addEmptyValueMapping(mapper, parameterName, model);
}
}
}
}
in this method the argument names are checked against the names of parameters passed in the request, and if no such name is available - the _parameterName parameter is tried, in case if it exists - the addEmptyValueMapping is called.
In the method addMapping there are the lines of code:
Code:
DefaultMapping mapping = new DefaultMapping(source, target);
mapping.setRequired(binding.getRequired());
- so the required flag is passed to the mapping from the binding declaration, but in the method addEmptyValueMapping the code looks like below:
Code:
DefaultMapping mapping = new DefaultMapping(source, target);
if (logger.isDebugEnabled()) {
logger.debug("Adding empty value mapping for parameter '" + field + "'");
}
mapper.addMapping(mapping);
so the required attribute is not set, which might lead to confusing behavior.