С точки зрения удобства использования текст в компоненте ввода должен сохраняться только для целей ввода пользователя. Возможное значение по умолчанию во входных данных должно быть действительным, если пользователь не тронул его.
Если подстановочный текст предназначен для подсказки о том, как заполнить ввод, лучше располагаться рядом со входом, где его можно увидеть и после заполнения ввода. Кроме того, использование текста-заполнителя внутри текстовых компонентов может вызвать проблемы, например, с брайлевскими устройствами.
Если используется текст-заполнитель, независимо от принципов юзабилити, следует убедиться, что он сделан ненавязчивым образом, чтобы он работал с пользовательскими агентами без javascript или когда js отключен.
Если я правильно понимаю, ваша проблема состоит из двух независимых частей:
] Для '1' ваш настраиваемый поставщик работает, но я бы создал настраиваемую область для транзакции и привязал бы класс Transaction к этой области. См. http://code.google.com/p/google-guice/wiki/CustomScopes для получения инструкций по настраиваемым областям действия.
Что касается «2», если у вас есть настраиваемая область действия, это обычная проблема использования Guice для предоставления экземпляров устаревшим классам. Вы не упомянули код, который в настоящее время предоставляет экземпляры транзакций для устаревших классов, но вы можете просто изменить этот конкретный фрагмент кода, чтобы запросить экземпляр у Guice. Поскольку вы внутри своего "
Взгляните на Assisted Inject . Чтобы использовать его, определите трехстрочный интерфейс:
public interface DataAccessClassFactory {
DataAccessClass create(Transaction transaction);
}
... и затем используйте привязку FactoryProvider
для привязки фабрики:
bind(DataAccessClassFactory.class).toProvider(
FactoryProvider.newFactory(DataAccessClassFactory.class, DataAccessClass.class));
Затем вы можете внедрить DataAccessClassFactory
где угодно вам необходимо создать DataAccessClass
. AssistedInject включен в Guice 2, хотя для него требуется отдельный файл .jar.