Ответ 1
Я попробовал обработанные и отключенные атрибуты, но это не сработало, это была моя ошибка, поскольку она недоступна в документах API.
В самом деле, это поведение не поддерживается. Однако, что касается возможного решения, вы в основном уже сами дали ответ:
Кроме того, существует ли способ переопределить класс
javax.faces.converter.DateTimeConverter
таким образом, что всякий раз, когдаf:convertDateTime
запускается, мой класс будет вызываться?
Это возможно и также решит вашу первоначальную проблему. Просто зарегистрируйте его как <converter>
в faces-config.xml
в точности тот же <converter-id>
как <f:convertDateTime>
.
<converter>
<converter-id>javax.faces.DateTime</converter-id>
<converter-class>com.example.YourDateTimeConverter</converter-class>
</converter>
В этом случае вы можете выполнить дополнительную условную проверку, например, проверить, нажата ли определенная кнопка, или если присутствует определенный параметр запроса или отсутствует. Если вы хотите продолжить задание по умолчанию <f:convertDateTime>
, просто делегируйте super
при условии, что ваш конвертер extends
из DateTimeConverter
.
например. в getAsObject()
:
public class YourDateTimeConverter extends DateTimeConverter {
@Override
public void getAsObject(FacesContext context, UIComponent component, String submittedValue) {
// ...
if (yourCondition) {
// Do your preferred way of conversion here.
// ...
return yourConvertedDateTime;
} else {
// Do nothing. Just let default f:convertDateTime do its job.
return super.getAsObject(context, component, submittedValue);
}
}
// ...
}