JSF - Richfaces, обработайте отправленные данные формы, а затем подтвердите, чтобы продолжить или отменить

Я хочу показать диалоговое окно подтверждения, чтобы продолжить или отменить операцию сохранения при отправке формы. У меня есть форма с кнопкой сохранения, которая вызывает метод действия для сохранения данных в форме. При нажатии кнопки сохранения файл будет прочитан на стороне сервера, прежде чем данные формы будут сохранены. Данные из файла будут объединены в данные формы, а затем данные формы будут сохранены. Мне нужны некоторые значения из формы, чтобы определить, какой файл будет прочитан. Пока проблем нет. Когда выброшено исключение FileNotFoundException или необходимые данные из файла не найдены, я хочу показать диалоговое окно подтверждения, чтобы продолжить или отменить операцию сохранения с вызванным сообщением.

Есть ли у кого-нибудь примеры или идеи, как с этим справиться? Нужно ли мне использовать a4j? Спасибо. Я использую Rifchfaces 3.3.3 и Seamframework 2.2.


person Yakari    schedule 13.09.2011    source источник


Ответы (2)


Сначала я должен исправить заголовок моего вопроса. Это не "обработка отправленных данных формы", а данные формы, которые будут отправлены после некоторой проверки.

Теперь решение.

Например, у меня есть следующее в моей форме:

  • некоторые поля

  • a4j:commandButton для повторной визуализации полей и выполнения действия doSomeStuff()

  • скрытый h: или a4j:commandButton для отправки формы.

1- Пользователь нажимает «фальшивую» кнопку отправки, которая представляет собой a4j: commandButtton,

2- Вызов Ajax обновляет поля в атрибуте reRender

3- После этого выполняется метод doSomeStuff() с перерисованными значениями полей

4- В конце концов, Javascript будет запускаться для отправки формы или нет.

Форма:

<h:form id="myForm">
<h:inputText id="name" value="#{personHome.person.name}"/>
<h:inputText id="surname" value="#{personHome.person.surname}"/>    

<a:commandButton value="Save" reRender="name, surname" 
            action="#{personHome.doSomeStuff()}" 
            oncomplete="return checkMessage('#{personHome.success}')" 
            id="a4jSave"    />

<h:commandButton id="save" value="Save"
                    action="#{personHome.persist}"
style="visibility:hidden" /> 

</h:form>

JavaScript:

<script  language="javascript">        

           function checkMessage(success) {
                 if(success =='false') 
                 {
                    return confirm('Do you want to submit this form?') ? submitForm() : false;
                 }   else {
                           submitForm ();
             }
             }

            function submitForm() {
                document.getElementById('myForm:save').click(); 
                return false;
            }               

        </script>  
person Yakari    schedule 20.09.2011

Да, вам нужно использовать a4j.

Попробуйте что-то подобное (не проверено, но следуйте алгоритму):

<a4j:commandButton  onclick="if(messageHasToBeDisplayed){Richfaces.showModalPanel('modalId');}else{doSomeStuff();}"  />
...
<a4j:jsFunction name="doSomeStuff" action="#{controller.doSomeStuff}" reRender="..."/>

Здесь показано, как отображать модальную панель, если это необходимо. Без дополнительного кода я не могу вам больше помочь, но я думаю, что это должно вам помочь...

person Jean-Charles    schedule 15.09.2011
comment
Я думаю, что также следует использовать вызов a4j/ajax. Чтобы было ясно... Мне нужна фальшивая кнопка сохранения (отправить), чтобы запустить вызов ajax, который запускает метод операции ввода-вывода файла с использованием данных заполненной формы. Когда операция с файлом успешно завершена, я хочу вызвать JavaScript в текущем представлении, чтобы автоматически отправить форму или попросить отправить или отменить отправку формы. - person Yakari; 15.09.2011
comment
Можете ли вы объяснить, что означает ваш код? Что произошло, когда я нажал cmdButton? Я думаю, что сначала проверяется условие en, ​​чем выполняется modalPanel или someStuff... Но мне нужно сначала сделатьSomeStuff, проверить условие, а затем подтвердить отправку... - person Yakari; 19.09.2011