|
|
|
JSF 2; AJAX; dialog
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите, пожалуйста. Есть страница в ней текстовое поле "Фамилия" и есть кнопочка открывающая диалог. Нажимаем кнопочку, открывается диалог, в нём поле ввода "Город" и кнопка "Готово". Код: html 1. 2. 3. 4. 5. 6. Пожалуйста, объясните, как по нажатию на кнопку выполнить скрипт JavaScript, в случае, если поле валидно (если не валидно не выполнять). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:56:37 |
|
||
|
JSF 2; AJAX; dialog
|
|||
|---|---|---|---|
|
#18+
Не совсем понятна задача. Непонятно, вам нужна серверная валидация или клиентская? Опишу несколько типовых решений. Пусть вам нужна серверная валидация, вариант 1) Ввести некий флаг и у кнопки выставить rendered="#{flag}", прикаждой валидации устанавливать этот флаг. Таким образом у вас кнопка будет рисоваться только в случае если валидация успешна(не забудьте добавить render кнопки по валидации). Опять же надо помнить, что теоретически запрос может быть подделан, нужно от этого защищаться или нет, зависит от ваших требований. Если кнопка все же нужна всегда, то можно провернуть такой же трюк с атрибутом disabled 2) Есть куча извращений, как сделать это чистым жаваскриптом, EL-выражениями и тп. 3) Можно использовать компонент-биндинг В общем, детализируйте плиз задачу, нужно ли вообще показывать эту кнопку, нужна ли защита на сервере, какой именно скрипт вы хотите выполнить и зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 15:24:37 |
|
||
|
JSF 2; AJAX; dialog
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, что откликнулись. Мне нужна серверная валидация. Срипт - закрыть диалоговое окно. Пытаюсь написать CRUD приложение ввода личной карточки (ФИО, паспорт(а), образование(ия), родственники и т.п.). На странице поля ввода данных и кнопочки для открывания диалоговых окон с полями ввода других данных (эти другие данные повторяются, например "город": "адрес по прописке", "адрес фактического проживания" и т.п.). Хотелось бы что бы кнопка присутствовала всё время. Валидация по потере фокуса не обязательна, можно проводить валидацию по нажатию на кнопку и, в случае успешной валидации, на сервере происходит "деятельность" и диалоговое окно закрывается. Не могу понять как закрыть диалоговое окно. И я пытаюсь избежать фреймворков (*faces, но почти созрел для использования prime faces). И должно работать под ие, а под остальным не обязательно, потому могу себе позволить showModalDialog. Искал и находил только ответы с рендерингом сообщений об ошибке. Находил описание jsf.ajax , но всё равно не могу сообразить как же закрыть диалог. я очень неопытный программист, буду рад если направите на хороший источник информации, найти его самостоятельно мне не удалось. возможно, я ошибся, выбрав JSF (2)? пишут, что он хорош для CRUD приложений. или я ошибся в "дизайне" (пытаясь решить ввод повторяющийся и иногда необязательной информации через далоговые окна)? Очень нужен совет опытного программиста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 16:15:18 |
|
||
|
JSF 2; AJAX; dialog
|
|||
|---|---|---|---|
|
#18+
В вашем случае все довольно просто, автор<h:outputLabel for="city" value="Город"/> <h:inputText id="city" value="#{adress.city}"> <f:ajax event="blur" render="cityMsg" /> </h:inputText> <h:message for="city" id="cityMsg" /> <h:commandButton value="Готово" type="button" id="b1" > <f:ajax event="click" render="@form" onevent="checkStatus"/> </h:commandButton> <script type="text/javascript"> function checkStatus(data) { var ajaxStatus = data.status; // Can be "begin", "success" and "complete" switch (ajaxStatus) { case "success": // This is called when ajax response is successfully processed. //Your script goes here break; } } </script> По сути я только добавил ajax поведение для кнопки, во время обработки ajax запроса несколько раз отрабатывается onEvent, вам надо выловить момент успешного окончания запроса, для этого проверяем data.status, если оно "success", то ваш скрипт выполнится и закроет диалоговое окно, если произошла ошибка - то ваш скрипт никогда не выполнится, и окно не закроется, а просто перерисуется, но ведь именно это вам и надо. Другое дело, что ваш запрос будет посылаться всегда, независимо от того валидна форма или нет, и вот для решения этой проблемы, существует куча способов, которые я упомянул раньше, но если вам эта проблема непринципиальна, то решения с onEvent вполне достаточно. авторИ я пытаюсь избежать фреймворков (*faces, но почти созрел для использования prime faces). И должно работать под ие, а под остальным не обязательно, потому могу себе позволить showModalDialog. А вт это вы зря, фреймворки иногда очень полезны, во многих из них кстати уже реализовано то что вам нужно, например в Richfaces можно прямо в a4j:ajax указать функцию oncomplete и т.д. Правда есть одна тонкость - фреймворков много, часто для одних целей подходит один, для других - другой, но я вам крайне советую выбрать один фреймворк, потому что между собой они дружат плохо и могут вспылвать странные баги. Я конечно могу быть необъективным, так как сам был разработчиком richfaces, но мой совет такой - если вам нужны красивые компоненты, и нет никаких особых требований, которые не вписываются в обычное использование компонента - то берите primefaces, если нужна более мощная поддержка ajax или специфические сценарии использования компонентов - то берите richfaces, если не хотите заботиться о том, какие области перерисовывать псоле каждого ajax запроса - iceFaces, с остальными работал мало. авторвыбрав JSF (2)? пишут, что он хорош для CRUD приложений. или я ошибся в "дизайне" (пытаясь решить ввод повторяющийся и иногда необязательной информации через далоговые окна)? Ну в принципе, немного лукавят, хотя в основном это правда. JSF - очень хорош, когда ты понимаешь как он внутри работает, а чтобы в нем разобраться, надо прочесть довольно много статей, книг и т.п. Но если ты в нем разобрался - то разрабатывать можно действительно очень быстро и удобно, я имею ввиду, что jsf только с виду прост, малейшее отклонение от идеологии - и вы можете столкнуться с неожиданностями(вроде вашей), и только хорошо зная внутренне устройство, можно умело обходить всяческие косяки. Многие советуют использовать вместо jsf gwt, но у меня в этом опыта мало, прочитайте пару вводных статей, может оно вам покажется роднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 16:48:47 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37627123&tid=2132764]: |
0ms |
get settings: |
13ms |
get forum list: |
25ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
59ms |
get topic data: |
18ms |
get forum data: |
5ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 340ms |
| total: | 538ms |

| 0 / 0 |
