The original code looks like this:
public String getTabindex()
if (_tabindex != null) return _tabindex;
ValueBinding vb = getValueBinding("tabindex");
return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
and the method getStringValue looks like this:
static String getStringValue(FacesContext context, ValueBinding vb)
Object value = vb.getValue(context);
if(value == null)
The effect described here comes from the use of value.toString(). If receives a EL expression that returns something different to String (in this case Integer) the effect of toString() is convert the value, so the component can handle it correctly.
The introduction of component generation using myfaces-builder-plugin, introduce without notice the change described. (It's more, there was a release candidate for 1.1.6 release before the real release) . In fact, this is not a blocker issue, because there exists a valid solution for that (change signature on the bean to return String instead). In jsf 1.2, this behavior is not present so when you go from 1.1 to 1.2 the same problem occur.
Here comes the difficult part: If in jsf 1.2 this behavior is not present, but on previous jsf 1.1 myfaces releases this is valid, Should we change this on 1.1?
If no objections I'll lower the priority of this issue to major.