Я не хочу использовать какой-либо конвертер и JavaScript
blockquote>Здесь нет никакой магии. Вы должны написать код для выполнения задания. Я понимаю, что ваша забота заключается в том, что вы не хотите повторять одно и то же задание преобразования в каждом отдельном поле ввода.
В этом случае просто зарегистрируйте конвертер именно на
String.class
черезforClass
атрибут@FacesConverter
, как показано ниже.@FacesConverter(forClass=String.class) public class TrimConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) { String trimmed = (submittedValue != null) ? submittedValue.trim() : null; return (trimmed == null || trimmed.isEmpty()) ? null : trimmed; } @Override public String getAsString(FacesContext context, UIComponent component, Object modelValue) { return (modelValue != null) ? modelValue.toString() : ""; } }
Таким образом, вам не нужно объявлять преобразователь в каждом отдельном поле ввода. Он будет применяться прозрачно для каждого значения модели
String
, у которого еще нет зарегистрированного явного конвертера.. Метод JavaScript не рекомендуется, поскольку он полностью работает на стороне клиента, и конечные пользователи могут легко отключить и манипулировать JavaScript. Конвертер JSF работает на стороне сервера, и его результат не управляется конечным пользователем.
В целом это работает. Но необходимо проверить очень тщательно, который классы то, где.
, Если Ваш класс задачи может быть загружен в classloader выше в classloader иерархии (как ПУТЬ К КЛАССУ или ANT_HOME/lib) затем, Ваш classpathref просто станет проигнорированным .
Read запись FAQ для получения дополнительной информации.
использование реализации загрузчика класса Муравья модель
делегации Java класс ClassLoder использует модель делегации для поиска классов и ресурсов. Каждый экземпляр ClassLoder имеет связанный загрузчик родительского класса. При призыве для нахождения класса или ресурса экземпляр ClassLoder делегирует поиск класса или ресурса к его загрузчику родительского класса прежде, чем попытаться найти класс или сам ресурс. Встроенный загрузчик класса виртуальной машины, названный загрузчиком класса начальной загрузки, самостоятельно не имеет родителя, но может служить родителем экземпляра ClassLoder.
Примечание: выполнение ant -diagnostics
может помочь также .
Почему не только выбирают самый простой вариант и указывают путь к классу в Вашем <taskdef>
?
<taskdef resource="axis-tasks.properties">
<classpath>
<fileset file="/path/to/axis/jars"/>
</classpath>
</taskdef>
Или создают секунду <classpath>
запись это подмножества library.dir
?
<path id="axis-tools-classpath">
<fileset dir="/path/to/axis/home">
<include name="*.jar"/>
</fileset>
<path refid="library.dir"/>
</path>
Бездельничание с ${ant.home}/lib
не является такой хорошей идеей и может почти всегда избегаться.
Муравей механизм для добавления библиотек:
Только. руководство ничего не упоминает об использовании свойство system.library.dir . Вероятно, это в значительной степени проигнорировало с этой целью.
кроме того, выполненный муравей в подробном режиме (и - подробный) для наблюдения, что делает под капотом.