public <P> void addPropertyChangeHandler(String property, PropertyChangeHandler<P> handler) {
validatePropertyExpr(property);
int dotPos = property.indexOf(".");
if (dotPos > 0) {
DataBinder nested = createNestedBinder(property);
nested.addPropertyChangeHandler(property.substring(dotPos + 1), handler);
}
else if (property.equals("*")) {
propertyChangeHandlerSupport.addPropertyChangeHandler(handler);
}
else if (property.equals("**")) {
for (DataBinder nested : binders.values()) {
nested.addPropertyChangeHandler(property, handler);
}
propertyChangeHandlerSupport.addPropertyChangeHandler(handler);
}
propertyChangeHandlerSupport.addPropertyChangeHandler(property, handler);