Мгновенная проверка длины поля в пользовательском интерфейсе - PullRequest
1 голос
/ 16 апреля 2011

Я столкнулся с необычной проблемой в проекте, который я разрабатываю.Требования не ясны в отношении размера дюжины или около того полей ввода текстовой области на веб-странице, и в результате я вынужден изменить не только столбец базы данных, чтобы увеличить длину, но и изменить указанный параметр размера.в моем JSF-валидаторе для этого компонента текстовой области.Поскольку код изменился, необходимо экстренное развертывание, которое сводит с ума многих людей.К сожалению, никто не совсем уверен, какой длины должны быть эти элементы данных, и мы ожидаем, что они будут часто меняться.Я поменял свои вархары на сгустки, но, к сожалению, размеры сгустков были слишком малы, и их тоже пришлось увеличить.Существуют ли какие-либо инструменты или API, которые помогут мне решить эту проблему?Или какие-либо лучшие практики?Я рассматриваю возможность создания небольшой функции по запросу, которая будет генерировать все длины столбцов в БД и делать ее доступной для приложения через одноэлементный класс.В этом случае представление пользовательского интерфейса будет ссылаться на этот конкретный элемент, тем самым устраняя необходимость в развертывании кода.

У кого-нибудь есть лучшие решения?

Я использую JSF1.2 + EJB3 + Weblogic + Oracle DB stack.

Большое спасибо за поиск.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2011

Звучит так, будто вы хотите создать проверочный код, который считывает метаданные базы данных во время выполнения.Дело в том, чтобы избежать повторного развертывания кода.

Первая часть не слишком сложна.Вторая часть немного рискованна.

Максимальная длина столбца появляется по крайней мере в некоторых представлениях information_schema.

select table_catalog, table_schema, table_name, 
       column_name, data_type, character_maximum_length
from information_schema.columns
where table_name = 'your-table-name'
order by table_catalog, table_schema, table_name, column_name

Но некоторые символьные типы данных могут не иметь значения для character_maximum_length.Текстовые столбцы PostgreSQL, например;столбцы типа «текст» имеют «неограниченную» длину.

Во-вторых, character_maximum_length не учитывает ограничения CHECK ().

create table foo (
  bar varchar(50) check (length(bar) <= 35)
);

Элемент управления, который читает символ_максимальную_ длину из файла information_schema.columns, будет содержать 50 символов, но база данных не позволит вам вставить такое количество.

Возможно, вам потребуется добавить несколько административных иВнедрение процессов обеспечения качества для снижения риска.

0 голосов
/ 16 апреля 2011

Ваша проблема, кажется, является крайним случаем довольно нормального варианта использования .. (varchar to clob ... :))

Вы не упомянули ни одного фреймворка ORM, и я предполагаю, что вы не используете Hibernate,

Первое решение, которое приходит мне в голову, это использование JSR 303 .Это очень масштабируемая, не навязчивая структура проверки.Вы можете реализовать этот фреймворк на любом желаемом уровне.Чтобы объединить все это, вы можете предоставить одно пользовательское ограничение validator , которое будет внутренним образом загружать максимальные и минимальные значения в зависимости от поля.Идея состоит в том, чтобы передать параметр через аннотацию, указав имя поля, сохранив минимальное-максимальное значение каждого имени поля в некотором внешнем файле свойств.Таким образом, валидатор будет динамически загружать минимальное максимальное значение на основе имени поля.

Таким образом, у вас есть настроенная структура для проверки каждого поля на основе ограничений, хранящихся в файле свойств.Вы можете использовать одно и то же ограничение как в своей презентации, так и на уровне DAO.

Конечно, одна вещь остается без ответа.

1. Как распространить это изменение на базовую базу данных.Вы могли бы предоставить максимально возможную длину в базе данных и устранить несоответствия на уровне своего приложения, но это может повлиять на производительность.(хотя, я сомневаюсь, что это произойдет. Oracle очень и очень умен в своем CBO).

Ищите здесь общий пример .

PS: я никогда не пробовалэта настройка сама, но это определенно возможно.

...