powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF+RichFaces: Как перерендрить форму после ошибки валидации?
17 сообщений из 17, страница 1 из 1
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762687
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi All,

Скорее всего, это ламерский вопрос, но я уже отчаялся с ним бороться, так что прошу не бить ногами.

Есть страница, на которой 2 панели в одной форме; в одной панели (objectsPanel) - таблица объектов, во второй (objectPanel) - поля для редактирования.

По линку из таблицы объектов загружается объект и рендрится вторая панель. Проблема в том, что после ошибке валидации во второй панели, при нажатии на линк не перерисовываюся заполненные поля второй панели. Если после ошибки валидации нажать кнопку "Reset" - все перерисовывается нормально.

Что я делаю не так?

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
	
<a4j:outputPanel id="objectsPanel">
	<rich:dataTable id="objectsTable" width="700" var="record" rowKeyVar="recordNumber" value="#{documentTypeConfigBean.objects}">
                <rich:column>
                    <h:outputText value="#{recordNumber+1}" />
                </rich:column>
                <rich:column>
                    <h:outputText value="#{record.id}"/>
                </rich:column>
                <rich:column>
                    <h:outputText value="#{record.names['en']}"/>
                </rich:column>
                <rich:column>
		    <a4j:commandLink execute="@this" render="objectPanel" action="#{documentTypeConfigBean.loadObject}" immediate="true">
                        <h:graphicImage value="/images/icons/edit.gif" alt="Edit Document Type" />
	                <a4j:param value="#{record.id}" assignTo="#{documentTypeConfigBean.objectId}" />
	            </a4j:commandLink>					
                </rich:column>
	</rich:dataTable>
</a4j:outputPanel>

<a4j:outputPanel id="objectPanel">
	<h:messages/>
	<br/>
	<h:panelGrid columns="2">
		<h:outputText value="Doc.Type Id"/>
		<h:inputText id="objectId" 
			value="#{documentTypeConfigBean.object.id}" 
			readonly="#{!empty documentTypeConfigBean.object.id}"
			required="true"
			requiredMessage="Doc.Type Id is required">
		</h:inputText>
	</h:panelGrid>
	<fieldset>
            <legend><b>Names</b></legend>
            <h:panelGrid columns="3">
            	<c:forEach items="#{languages}" var="language">
            		<h:outputText value="#{language.name}"/>
            		<h:inputText value="#{documentTypeConfigBean.object.names[language.id]}" 
            					size="30"
            					required="true"
            					requiredMessage="Names[#{language.name}] is required"/>
            		<h:graphicImage value="#{language.image}" alt="#{language.name}" height="12" width="18"/>
            	</c:forEach>
            </h:panelGrid>
        </fieldset>					
	<a4j:commandButton type="submit" value="Submit" action="#{documentTypeConfigBean.addObject}" render="objectsPanel, objectPanel, popupModalPanel" oncomplete="if (#{empty facesContext.messageList}) #{rich:component('popupModal')}.show();"/>						            
	<a4j:commandButton type="reset" value="Reset" action="#{documentTypeConfigBean.resetObject}" render="objectPanel"/>
</a4j:outputPanel>
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762723
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПроблема в том, что после ошибке валидации во второй панели, при нажатии на линк не перерисовываюся заполненные поля второй панели. Если после ошибки валидации нажать кнопку "Reset" - все перерисовывается нормально.


Вот тут поподробнее пожалуйста, если можно по шагам - ввел то-то, нажал то-то получил то-то, я не понимаю о каком линке вы говорите, а искать связь как-то лень если честно)
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762742
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вроде понял я что вы хотите
Код: html
1.
2.
<a4j:commandLink execute="@this" render="objectPanel" action="#{documentTypeConfigBean.loadObject}" immediate="true">
	            </a4j:commandLink>



Зачем вы используете аттрибут immediate="true"? Вы знаете как он работает? Я думаю если убрать то все заработает, другое дело что может быть он у вас какие-то функции выполняет - тогда будем думать еще
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762754
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

Линк вот этот, который подгружает объект и рендрит форму:

Код: html
1.
2.
3.
4.
<a4j:commandLink execute="@this" render="objectPanel" action="#{documentTypeConfigBean.loadObject}" immediate="true">
    <h:graphicImage value="/images/icons/edit.gif" alt="Edit Document Type" />
    <a4j:param value="#{record.id}" assignTo="#{documentTypeConfigBean.objectId}" />
</a4j:commandLink>					



Последовательность шагов такова:

1. Заполняю форму не до конца, вызывая ошибку валидации при создании нового объекта;
2. Кликаю на линк в таблице существующих объектов в надежде получить для редактирования существующий объект;
3. Обнаруживаю, что при рендеринге формы не обновилось содержимое полей, которые я заполнил на шаге 1.
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762760
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

не работает и без immediate="true". Если его нет - еще и messages от валидации показывает.
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762830
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну мне две вещи бросились в глаза.
1) Попробуйте execute="@form" или execute="form" - не помню точный синтаксис, суть в том чтобы вся форма перерендерилась.
2)
Код: html
1.
<a4j:param value="#{record.id}" assignTo="#{documentTypeConfigBean.objectId}" />

а потом
Код: html
1.
value="#{documentTypeConfigBean.object.id}"


Может где-то опечатка закралась

Кстати было бы полезно увидеть ваш java код
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762885
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

1. С execute="@form" не срабатывает action у линка; если убрать immediate="true", то пытается валидировать пустую форму
2. Это не опечатка, есть отдельная переменная objectId, куда кладется значение id из таблицы при нажатии на линк. Потом в форме редактируются поля объекта

Насколько я понимаю, форма каким-то образом "помнит", что она не прошла валидацию, и это отражается на ее отрисовке. Есть какая-нибудь возможность "стереть" эту память? Я пробовал чистить коллекцию messages и ресетить объект - ноль эмоций. Кнопка reset замечательно с этим справляется, но как вызвать ее программно - непонятно.

Вот java-код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	public String loadObject() throws Exception {
		object = new DocumentType( objectId );
		object = documentFacade.getDocumentType( object );
		return null;
	}

	public String addObject() throws Exception {
		documentFacade.addDocumentType( object );
		objects = null;
		return null;
	}
	
	public void resetObject(){
		object = new DocumentType();
		object.setNames( new HashMap() );
		for (Iterator it = CommonsConfigHelper.getConfig().getLanguages().iterateLanguage(); it.hasNext(); ){
			Language ln = (Language)it.next();
			object.getNames().put(ln.getId(), null);
		}
		log.debug("Document type reset!");
	}
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762916
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще пару вопросов - пока я разбираюсь - панель вообще отрисовывается по второму нажатию на линк? Чтобы проверить можно запихнуть в панель скрипт с alert('rendered') и 2 - вы дебаггером смотрели - все методы вызываются?
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762934
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

Отрисовывается. В форме все поля required. Если часть из них не заполнена до валидации - именно они перерисовываются с новыми данными, заполненные остаются такими, какими были до валидации
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762946
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что кнопка ресет работает потому что это дефолтное поведение для кнопки ресет у формы - очистить все поля, то есть теоретически вы можете повесить на свой линк javascript, который пробегается по всем поям, и обнуляет текст - это как временный воркэраунд, но конечно хотелось бы разобраться почему такое происходит.
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762948
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никЯ думаю что кнопка ресет работает потому что это дефолтное поведение для кнопки ресет у формы - очистить все поля, то есть теоретически вы можете повесить на свой линк javascript, который пробегается по всем поям, и обнуляет текст - это как временный воркэраунд, но конечно хотелось бы разобраться почему такое происходит.

Опппа.. получается что часть данных с одного объекта - часть из другого? Ну ок, сейчас подумаю
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762951
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой не то процитировал.. ну вы поняли
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762964
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

На форме все поля с одного объекта - documentTypeConfigBean.object
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762976
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таки да - вы были правы - инпуты хранят submittedValue, но это можно победить, вот список ресурсов которые вам должны помочь.
http://stackoverflow.com/questions/619050/jsf-commandbutton-with-immediate-true
https://cwiki.apache.org/confluence/display/MYFACES/Clear+Input+Components
https://community.jboss.org/thread/4367
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37762984
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Африканецзабыл ник,

Отрисовывается. В форме все поля required. Если часть из них не заполнена до валидации - именно они перерисовываются с новыми данными, заполненные остаются такими, какими были до валидации

Концептуально - они из разных объектов, я это имел ввиду - Один объект - ваш новый объект, а второй - тот что был. Ну да не суть важно, я думаю решение выше
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37763094
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую разобраться
...
Рейтинг: 0 / 0
JSF+RichFaces: Как перерендрить форму после ошибки валидации?
    #37763779
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСпасибо, попробую разобраться

Вроде бы нашел решение: http://balusc.blogspot.com/2012/03/reset-non-processed-input-components-on.html

Предложенные в линках, к сожалению, не сработали (кроме тупого перехода по navigation rule, конечно). Или я их реализовал криво.

Огромное Вам спасибо за идеи и дай Вам Бог здоровья.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF+RichFaces: Как перерендрить форму после ошибки валидации?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]