As near as I can figure at the moment, the problem does seem to exist in the patched version of jsf.js that we have in 2.1.3. In there is a clone attributes function that we modified. In that function, we altered how attributes are copied. Here is the section that deals with input style elements specifically:
var isInputElement = target.nodeName.toLowerCase() === 'input';
var propertyNames = isInputElement ? coreElementProperties.concat(inputElementProperties) : coreElementProperties;
for (var iIndex = 0, iLength = propertyNames.length; iIndex < iLength; iIndex++) {
var propertyName = propertyNames[iIndex];
var attributeName = propertyToAttribute(propertyName);
if (sourceAttributeDetector(attributeName)) {
var newValue = source[propertyName];
var oldValue = target[propertyName];
if (oldValue != newValue) {
target[propertyName] = newValue;
}
} else if (targetAttributeDetector(attributeName)) {
target[propertyName] = '';
}
}
From my testing, I don't see either the sourceAttributeDetector() or targetAttributeDetector() conditions being satisfied which would mean the attribute never gets updated. This aligns with the fact that the response coming back from the server is correct in that the value has been cleared.
Since this code is similar to the code we passed to the Mojarra team for inclusion in JSF for 2.1.15, we should make sure we don't have the same problem there.
Another observation, if I set the value bound objects to null directly instead of the clear code, it still doesn't work with the patched jar. It does however work with the non-patched jar.