Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JSF, очистка формы после submit


Автор: polosatij 13.9.2008, 02:40


после submit-a должна проис\ходить очистка формы автоматически.. можно ли сделать это как-то выставлением атритуба (автоматом) без итерации всех полей самому?  smile 

Автор: ivg 13.9.2008, 12:38
Цитата(polosatij @  13.9.2008,  05:40 Найти цитируемый пост)
после submit-a должна проис\ходить очистка формы автоматически..

А если по какому нибудь полю валидация не прошла, заставлять пользователя заново вводить все поля? Это нехорошо.
Обычно форма (или часть её) предназначена для ввода или редактирования данных по какой то конкретной сущности модели предметной области. Объект соответствующего класса является полем бина, например есть некий бин, предназначенный для заведения юзера, сам объект класса User является полем этого бина, тогда на форме будет что то типа
Код

<h:form>
    ...
    <h:inputText required="true" value="#{userbean.user.firstName}" />
    ...
    <h:inputText required="true" value="#{userbean.user.lastName}" />
    ...
    <h:commandButton value="Add User" action="#{userbean.addUser}" />
</h:form>
 ну так и вот, для очистки полей формы, достаточно в коде соответствующего action добавить всего одну строку:
Код

public String addUser() {
    // this.user сохраняем в БД
    ....
    // ну а затем выставляем нового
    this.user = new User();
    return null;
}

Автор: polosatij 13.9.2008, 16:09
Цитата(ivg @  13.9.2008,  12:38 Найти цитируемый пост)
А если по какому нибудь полю валидация не прошла, заставлять пользователя заново вводить все поля? Это нехорошо.


у меня нет этого случая..  smile 


Цитата(ivg @  13.9.2008,  12:38 Найти цитируемый пост)
this.user = new User();


так не пойдёт.. я не работаю с объектом, я работаю с атрибутами объекта полученного через EJB.. итого, у меня в форме куча полей (а не один Object) которых нужно заNULLить.. нет ли какого атрибута для формы => если заного загружаем форму -> форма чиста как лист  smile 

Автор: Zamuta 13.9.2008, 23:37
polosatij, попробуйте бин страницы или бин отвечающий за данные на странице хранить в request scope. 

Автор: polosatij 15.9.2008, 12:18


данные на странице обязаны находится в 

<managed-bean-scope>session</managed-bean-scope>

сессии.. или я чего-то неправильно понял?  smile 

Автор: polosatij 15.9.2008, 19:49



Цитата(Zamuta @  13.9.2008,  23:37 Найти цитируемый пост)
polosatij, попробуйте бин страницы или бин отвечающий за данные на странице хранить в request scope.  


к сожалению, такой фокус не пройдёт.. я работаю с AJAX, а это значит, у меня много requests для валидации, etc. -> постоянно форма будет очищатся, что мне не надо..

млин, как же сделать..  smile 

Автор: ivg 15.9.2008, 20:05
Цитата(polosatij @  13.9.2008,  19:09 Найти цитируемый пост)
так не пойдёт.. я не работаю с объектом, я работаю с атрибутами объекта полученного через EJB.. итого, у меня в форме куча полей (а не один Object) которых нужно заNULLить.. нет ли какого атрибута для формы => если заного загружаем форму -> форма чиста как лист

Чем не нравится способ очищения всех полей в бине, к которому привязана форма?

Автор: polosatij 15.9.2008, 21:57
Цитата(ivg @  15.9.2008,  20:05 Найти цитируемый пост)
Чем не нравится способ очищения всех полей в бине, к которому привязана форма? 


слишком много работы.. всего будет около 100-200 форм, в каждой по 10 полей.. постоянно set-теры не хочется писать, нужно тесторовать и легко что-то пропустить..

я пошёл пока путём reflection и написал пару анотаций для исключений.. вроде работает пока без трабл, но я не очень доволен этим решением.. smile

Автор: ivg 15.9.2008, 22:17
Цитата(polosatij @  16.9.2008,  00:57 Найти цитируемый пост)
слишком много работы.. всего будет около 100-200 форм, в каждой по 10 полей.. постоянно set-теры не хочется писать, нужно тесторовать и легко что-то пропустить..

В JSF вместо объекта с геттерами/сеттерами можно использовать Map, ну то есть при обращении к полю
Код

<h:inputText required="true" value="#{userbean.form.somefield}" />
 если (form instanceof Map) == true,то JSF будет делать form.get("somefield") и form.put("somefield", value). Может эту особенность можно как то использовать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)