| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JSF 1.2 findComponent() |
| Автор: Fedrus 10.10.2007, 10:57 | ||
| Всем добрый день! Не ругайте сильно если что - начинающий программист Напишу код потом проблемма. Страница :
B так здесь есть форма при нажатии ссылки add user открывается форма для заполнения инфо о юзере мы вводим значения в инпут поля пото нажимаем кнопку add! и не зависимо от результата добавился юзер или нет в инпут полях остаются значения это ничего но вот хотелось чтоб при нажатии на ссылка add user форма очищалась но это не так! (бин хранится в request scope) И так зделал для начало отельную ссылку очистка формы она вызывает метод clearForm тут начинается самое интересное. Сейчас findComponent("module") находит subview по id а мне нужно то чтоб он находил форму по id = addUserForm и тогда можно чистить все компоенты(вроде должно получиться) Но вот проблемма!!!: он не находит форму ни так findComponent("addUserForm") не так findComponent("module:addUserForm") ДОБАВИЛ блин пробовал и различные вариации с поиском h:panelGrid тоже не помогло. Есть у кого какие соображения по этому поводу?? (возможно есть другие способы очистки формы?? и более легкие??) |
| Автор: ivg 10.10.2007, 11:57 | ||||
В коде бина user:
|
| Автор: Fedrus 10.10.2007, 12:28 | ||||
| Дело в том что если заполнить не все поля, а скажем Lastname , так как у меня есть другие required поля то в addAction не заходит. А в поле Lastname остается значение, оно пропадает если перейти на другой модуль а потом обратно но надо чтоб оставаясь на этом модуле это поле очищалось нажатеем кнопки ссылки. Вообще у меня есть задача сделать очистку формы но добавление юзеров пока не работает. вот полный код бинов: #{user} = userController:
user:
Если всетаки проблемма связанна с неработающим добавлением юзера то объясните как? Спасибо ivg за вариант но думаю ты не совсем понял в чем проблема. Жду еще советов и предложений. Заранее спасибо. |
| Автор: Fedrus 10.10.2007, 13:57 |
| А (UIComponent) FacesContext.getCurrentInstance().getViewRoot().findComponent("module"); возвращает UINamingContainer я совсем нуб подскажите плз как мне отобразить все это дерево на экране?? |
| Автор: ivg 10.10.2007, 14:12 | ||||||||||||
1.Не заходит, потому что в этом случае валидация не проходит, и тогда сразу идёт Рендеринг. Фаза INVOKE_APPLICATION пропускается, а именно на ней, в данном случае происходит вызов clearForm(); Если стоит задача сделать очистку формы в любом случае, то тогда у ссылки нужно поставить атрибут immediate="true":
Тогда clearForm() будет вызвана до фазы валидации. 2.По поводу самой функции clearForm(): во первых она должна быть рекурсивной:
во вторых я бы точно не стал так заморачиваться а сделал бы как я уже написал:
Это самое простое решение, правда тут есть одно но: Бин user в RequestScope, и создавать новый объект, который по окончании запроса станет мусором, только для того чтобы отобразить пустые поля, как то не кошерно Если бы он был SessionScope тогда это ИМХО было бы лучшим решением. Так вот по этому поводу ещё один вариант (только для RequestScope):
Соответственно гдето в faces-config.xml
где addUser.jsf - View указанный ранее. Вот, выбирай |
| Автор: Fedrus 10.10.2007, 15:09 | ||
| ДАААА вот это да а я и не подумал this.user = new User(); в clianForm добавить спасибо большое! (не успел обрадоваться как попробывал и опять 25) Теперь я попробовал три варианта второй и третий не работают((( Первый на выполнении UIComponent form = (UIComponent) FacesContext.getCurrentInstance() .getViewRoot().findComponent( "PG1" + NamingContainer.SEPARATOR_CHAR + "addUserForm"); выбрасывает ошибку java.lang.IllegalArgumentException: PG1
вот так вот ((( Странно но у меня findComponent находит только <f:subview id= "module"> а при поиске PG1 или других элементов null(( Должно быть по другому?? |
| Автор: ivg 10.10.2007, 16:15 | ||
Эт я затупил если findComponent("module") находит, то должен находить форму по findComponent("module" + NamingContainer.SEPARATOR_CHAR + "addUserForm"); Вот это странно, посмотри на клиенте (в браузере) у этой формы какой id? |
| Автор: Fedrus 10.10.2007, 16:48 |
| (про регистр я тоже заметил) УРААА! Все заработало вот так findComponent("module" + NamingContainer.SEPARATOR_CHAR + "module:addUserForm"); id на странице выглядит module:module:addUserForm(это из-за того что у нас ипрорты) вот и добавил module:))) Спасибо огромное ivg !! Надо было сразу посмотреть. |