|
|
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
Уважаемые, почему у меня при загрузке страницы срабатывает метод changeVisible(), хотя по моей задумке он должен срабатывать только по нажатию по кнопке? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. В результате при открытии страницы показывается блок "out" Вопрос 2: как можно это сделать по-другому (пользователь вводит какие-то данные, нажимает "Вычислить" - в бине вычисляется необходимое и показывается panelGrid с помощью ajax на этой же странице) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:15 |
|
||
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
1) возможно, из-за того, что jsf2.2 не поддерживается сервером (xmlns:h=" http://xmlns.jcp.org/jsf/html" поменять на старый) 2) аякс перерисовывает только то, что уже есть на форме. Допустим, h:panelGrid изначально не видна - тогда после нажатия на кнопку перерисовывать будет нечего. Надо примерно так: Код: html 1. 2. 3. - на форме всегда будет присутствовать элемент "out", перерисовываться будет его содержимое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:51 |
|
||
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
3) ну и в самом f:ajax ошибка, надо вместо onevent="click" поставить event="onclick" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:54 |
|
||
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
4) и еще одна ошибка в f:ajax: вместо execute="#{simpleBean.changeVisible()}" должно быть listener="#{simpleBean.changeVisible()}" Рекомендую хотя бы иногда заглядывать в интерактивную справку :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 14:02 |
|
||
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
ivanra, Спасибо за ответ! Сервер использую glassfish4, проект из netbeans 7.3 - все по умолчанию Вообще то что я написал - у меня работает) Только с точностью до наоборот - сначала все покажет, потом по нажатию кнопки адекватно скрывает - можно сделать грязный хак - при инициализации переменной установить ее в true и тогда все тип-топ. Я взял буквально первый пример из JSF Core Хорстманна и начал его творчески перерабатывать. И справку и примеры искал и читал - но либо лыжи у меня не едут, либо нужно сначала набить все шишки Вообще читаешь теорию, все кажется понятным - переходишь к самостоятельной практике - спотыкаешься на каждом шагу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 14:22 |
|
||
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
Aghial, правильней сказать, что работает не сточностью до наоборот, а случайным образом. 1) атрибут onevent - вызывает js функцию под названием "click". Скорее всего, такой функции нет, и просто ничего не происходит. Допустим, такая функция была бы. Тогда она вызывалась до 3 раз, со статусами "begin", "complete" и "success" 2) атрибут event не указан. Точно не могу сказать, что в этом случае происходит, но, вероятно, аякс вызывается на все возможные UI события. Например, на событие onload - сразу, как только загрузилась страница. Отсюда и срабатывание при показе страницы. 3) не указан обработчик события на стороне сервера (actionlistener). В этом случае ничего не должно вызываться, происходит просто перерисовка области, указанная в атрибуте render 4) зато указан атрибут execute, в котором задается выражение для вычисления элементов, значения которых дролжны быть обработаны на севере. Сервер пытается вычислить это выражение, поэтому changeVisible все-таки срабатывает. Очевидно, вызов changeVisible осуществляется нечетное число раз, иначе мы бы даже не заметили его работы В общем, при работе с аяксом надо четко понимать, что тут идет серверная и клиентская обработка. И хотя f:ajax позволяет писать программы без яваскрипта, но знать его тем не менее, надо, и как сама технология аякс работает - тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 15:04 |
|
||
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
ivanra, Спасибо за подробный разбор. Из Хорстманна - event для ajax для кнопок и ссылок по умолчанию - "action" Итого код получился таким: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. А все грабли - да, были именно такие ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 16:01 |
|
||
|
h:commandButton + f:ajax JSF
|
|||
|---|---|---|---|
|
#18+
Aghial, Тут новый вопрос появился Есть simpleBean с Код: java 1. Есть < Код: java 1. который отображается при первом показе как "0.0" Как сделать, чтобы первоначально это был пустой inputText, чтобы не маячили нули? Дальше будет ожидаться значение double обрабатываемое при помощи Converter и Validator. "<c:if>"? - не пойму как. Через JS? Как правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 18:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38894514&tid=2125735]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
160ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 494ms |

| 0 / 0 |
