generalize supported types support, use it in HrefWidget as well
use id_field instead of hard-coding 'id'
minor