провалидировать xpage на SSJS

beloff

Member
07.05.2020
11
0
BIT
0
Всем шалом. Павел, здравствуйте.

скоро мозги закипят, но проблема что-то не решается. Перекурил инет
проблема с виду простая - создается документ, в нем заполняются поля, перед сохранением (кнопка обычная типа батон, а не субмит - на ней написано все сохранение полей). никак не получается провалидировать заполненность нужных полей - то что на querySave в лотусе делается на раз-два.
свойтсво required юзаю. Если поле не заполнено то просто ничего не происходит, пробую validateMessage как в хелпе написано - да не вылазит никакой мессадж (может потому что у меня поля чекбоксы и радио бутоны, а не простой инпуттекст)

Пишу только на ssjs. Прошу идей.

заранее спасибо
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
Вариантов много. Например, самое простое.
  • Можно скриптом в одном месте (функции) проверить.
  • Можно свой валидатор на Java написать.
  • Можно по полям валидаторы расставить.
  • Можно Data querySaveDocument задействовать.
Но чтобы что-то из этого "стрельнуло" нужны определённые условия и последовательность действий. Вас какой вариант больше интересует? Как собираетесь отображать пользователю сообщения об ошибках?
 

beloff

Member
07.05.2020
11
0
BIT
0
Вариантов много. Например, самое простое.
  • Можно скриптом в одном месте (функции) проверить.
  • Можно свой валидатор на Java написать.
  • Можно по полям валидаторы расставить.
  • Можно Data querySaveDocument задействовать.
Но чтобы что-то из этого "стрельнуло" нужны определённые условия и последовательность действий. Вас какой вариант больше интересует? Как собираетесь отображать пользователю сообщения об ошибках?
задача показать юзеру сообщение о незаполненном поле до сохранения документа. п.1,2,4 - равнозначны, могу и так и так, может жаба чуть предпочтительнее. п.3 почему то отказывается работать
<xp:this.validators>
<xp:validateRequired>
<xp:this.message><![CDATA["Вопрос 1 обязателен к заполнению!"]]></xp:this.message>
</xp:validateRequired>
</xp:this.validators>

может, дело в том что валидатор-мессага на радио батон и чекбокс работает как-то по другому, чем на инпут
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
задача показать юзеру сообщение о незаполненном поле до сохранения документа. п.1,2,4 - равнозначны, могу и так и так, может жаба чуть предпочтительнее. п.3 почему то отказывается работать
<xp:this.validators>
<xp:validateRequired>
<xp:this.message><![CDATA["Вопрос 1 обязателен к заполнению!"]]></xp:this.message>
</xp:validateRequired>
</xp:this.validators>

может, дело в том что валидатор-мессага на радио батон и чекбокс работает как-то по другому, чем на инпут
Штатные валидаторы на полях работают только если у вас на странице есть кнопка Submit без какого-либо кода, т.е. никаких document.save() нигде быть не должно.

Вариант 1. Делаете просто кнопку не Submit, В эвентах на onclick жмакаете кнопочку "Add Group..." открывается окошко "Enter an expression if you want this group to execute conditionally." пишите сюда код проверки, код должен вернуть true если всё хорошо или fasle если что-то не так. После к этой группе добавляете действие "Сохранить документ" и другие, тип "Открыть страницу" или что-то там у вас должно случится после сохранения. Идея в том, что все действия в группе выполняются только если "условия выполнения группы/Enter an expression if you want this group to execute conditionally" равно true, в противном случае дальнейшее выполнение прерывается. Для вывода сообщений в "Display Error" используйте

Вариант 2. Свой валидатор на Java. Ваш класс должен быть унаследован от javax.faces.validator.Validator, зарегистрирован как валидатор в faces-config.xml. Вот простой пример Тут видно как "выводятся" ошибки через FacesMessage. Если валидатор выбросил исключение ValidatorException, то документ не сохраняется, ошибки отображаются в "Display Error". Если исключения не было, значит считается что проверка прошла успешно.

Вариант 4. В эвентах страницы есть раздел Data, а в нём queryDocumentSave.
Можно сюда вписать код, который вы обычно пишите на LS в форме на QuerySave, только на JS (LS тут не прокатит :)). Точно так же оно должно вернуть True или False.
Эта проверка сработает только если на странице есть кнопка Submit и никаких document.save() скриптом.


Image 2021-04-298.png


не вылазит никакой мессадж (может потому что у меня поля чекбоксы и радио бутоны, а не простой инпуттекст)

Вы же не заполняете их никакими значениями по умолчанию?

 

beloff

Member
07.05.2020
11
0
BIT
0
Вы же не заполняете их никакими значениями по умолчанию?
тут вобщем такая сложная тема - я делаю типа анкеты. Есть опросник, туда можно кучу всяких вопросов засунуть (и обычный, и мультивыбор вопрос и произвольный текст) с возможностью указать обязательный к заполнению вопрос или нет -и из-за этой шляпы что значения в чекбоксы и радио батоны для выбора попадают из другого скрытого поля прямо следует куча проблем .

не работает. Тут дело в том как проверить радио батон на пустоту. у меня есть скрытое поле в котром к примеру есть 3 значения "Волк, заяц, лев". Эти значения передаются к качестве пунктов выбора. вопрос в том что когда я текстом проверяю значение элемента этого через getComponent("a1").value - мне возвращает все 3 значения. Кликаешь на радио батон, выбираешь - возвращается одно значение, выбранное. Я понятно объясняю?

или вариант 2 - как сделать радио батон чекнутым по дефолту когда значения computed. Когда заданы жестко то все понятно - написал defaultValue и проблема решена. а тут как - хз, бился, бился, а все бестолку
 

beloff

Member
07.05.2020
11
0
BIT
0
А так?
я ж говорю тут какая тема: когда радио батон не кликнут - выдает, что значение компонента= полному списку значений ("Волк, заяц, лев"). Когда кликаешь - возвращает выбранное кликнутое значение. т.е. получается что в радио батон груп пустых значений не бывает никогда. Еще заметил: по дефолту чекбокс - чекнуты все выборы, а в радиобатоне - ничего. Из-за чего по сути весь сыр-бор и разгорелся: был бы кликнут по дефолту радио батон- вот и валидировать ничего не нужно, значение выбрано. Я придумал костыль вобщем для обхода этой байды: на ивенте afterpageLoad проверяю какие поля предназначены для радиобатонов, беру из этого массива первое значение и пихаю через getComponent().setValue(a[0])
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
я ж говорю тут какая тема: когда радио батон не кликнут - выдает, что значение компонента= полному списку значений ("Волк, заяц, лев"). Когда кликаешь - возвращает выбранное кликнутое значение. т.е. получается что в радио батон груп пустых значений не бывает никогда. Еще заметил: по дефолту чекбокс - чекнуты все выборы, а в радиобатоне - ничего. Из-за чего по сути весь сыр-бор и разгорелся: был бы кликнут по дефолту радио батон- вот и валидировать ничего не нужно, значение выбрано. Я придумал костыль вобщем для обхода этой байды: на ивенте afterpageLoad проверяю какие поля предназначены для радиобатонов, беру из этого массива первое значение и пихаю через getComponent().setValue(a[0])
это на "чистой" базе так глючит? и какая версия клиента/сервера
 

beloff

Member
07.05.2020
11
0
BIT
0
кто б еще помог с идеями как штатно валидировать чекбокс груп. custom validator не работает - no message
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!