Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PrimeFaces - в <p:commandLink> не работает ajax? 
:(
    Опции темы
isabsent
Дата 27.5.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



PrimeFaces 2.2.1, FireFox 4.0.1 (или IE 9.0) Не могу заставить обновиться табличку после удаления из нее одной записи. Изменения становятся видны только при обновлении страницы. (JSF Mojarra 2.0.3 + PrimeFaces 2.2.1 используются только как view - все бины находятся под управлением Spring 3.0.5 IoC ).
Файл index.xhtml:
Код

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Title</title>
    </h:head>
    <h:body>
        <h:form>  
            <h:messages globalOnly="true" />      
            <h:outputText id="noStringsText" value="No Strings Found" rendered="#{controller.strings.rowCount == 0}"/>
            <p:dataTable id="strings" value="#{controller.strings}" var="string" rendered="#{controller.strings.rowCount > 0}">
                <f:facet name="header">Strings Table<br/></f:facet>
                <p:column>
                    <f:facet name="header">Note</f:facet>
                    #{string}
                </p:column>
                <p:column>
                    <f:facet name="header">Action</f:facet>
                    <p:commandLink id="cancel" value="Cancel" update="strings" actionListener="#{controller.cancelListener}"/> 
                </p:column>
            </p:dataTable>  
        </h:form>        
    </h:body>
</html>

Бин Controller.java
Код

@Service
@Scope("session")
public class Controller {

    private DataModel strings;
    private List<String> stringList;

    @PostConstruct
    public void init() {
        stringList = new ArrayList<String>();
        for (Integer i = 0; i < 5; i++) {stringList.add(i.toString());}
        setStrings(new ListDataModel(stringList));
    }

    public void cancelListener(ActionEvent event) {
        String o = (String) getStrings().getRowData();
        stringList.remove(o);
        ((List) getStrings().getWrappedData()).remove(o);
    }

    public DataModel getStrings() {
        return strings;
    }

    public void setStrings(DataModel strings) {
        this.strings = strings;
    }
}


То есть update="strings" не срабатывает, хотя строка удаляется из ArrayList! Если вместо  update="strings" вставить ajax="false", то обновление после удаления проходит нормально, но это не то, что хотелось бы получить. Нужно обновление именно таблицы, а не всей страницы... Не пойму - где я ошибаюсь?

Это сообщение отредактировал(а) isabsent - 27.5.2011, 09:32
PM MAIL   Вверх
MisterCleric
Дата 27.5.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
А просто:
Код

 <p:commandLink id="cancel" value="Cancel" update="strings" action="#{controller.cancelListener}"/>

Не помогает? Ну и естественно метод в бине без параметров.



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Stolzen
Дата 27.5.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



А как сам ajax запрос отправляется? разве js не нужен?


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
isabsent
Дата 27.5.2011, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(MisterCleric @ 27.5.2011,  09:40)
Привет.
А просто:
Код

 <p:commandLink id="cancel" value="Cancel" update="strings" action="#{controller.cancelListener}"/>

Не помогает? Ну и естественно метод в бине без параметров.

Попробовал 
Код

<p:commandLink id="cancel" value="Cancel" update="strings" action="#{controller.cancelListener}"/>
. В этом случае вообще не удаляется - даже после обновления страницы. То есть оно, похоже, даже из ArrayList'а строку не удаляет... 
     Без параметров тут метод применять нельзя насколько я понимаю. Тут нужен именно ActionListener - чтобы получить номер строки, которую надо удалить. А он должен принять на вход Event...

Это сообщение отредактировал(а) isabsent - 27.5.2011, 09:57
PM MAIL   Вверх
En_t_end
Дата 27.5.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Это та же самая проблема, что была у тебя здесь: http://forum.vingrad.ru/forum/topic-330524.html
Я тебе уже писал там, изучай доки к JSF. Твой dataTable скорее всего имеет id что-то типа такого: j_a32:strings

Добавлено через 7 минут и 31 секунду
Поиграйся, к примеру, с параметром prependId у формы
PM MAIL ICQ Skype GTalk Jabber   Вверх
isabsent
Дата 27.5.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(En_t_end @ 27.5.2011,  10:00)
Это та же самая проблема, что была у тебя здесь: http://forum.vingrad.ru/forum/topic-330524.html
Я тебе уже писал там, изучай доки к JSF. Твой dataTable скорее всего имеет id что-то типа такого: j_a32:strings

Добавлено @ 10:08
Поиграйся, к примеру, с параметром prependId у формы

В http://forum.vingrad.ru/forum/topic-330524.html я просто добавил <p:ajax> - тэг внутрь <h:selectBooleanCheckbox> после чего всё прекрасно заработало. Я не вытаскивал "правильный" ID из javascript-кода сгенерированной страницы.
Код

<h:selectBooleanCheckbox id="checkWallet" value="#{outcomeController.searchCriteria.isCheckedWallet}" >
       <p:ajax update="wallet" event="change"/>
</h:selectBooleanCheckbox> 
<h:selectOneMenu id="wallet" value="#{outcomeController.searchCriteria.wallet}" converter="#{walletConverter}" style="width:100%" disabled="#{!outcomeController.searchCriteria.isCheckedWallet}">
        <f:selectItems value="#{walletController.allWallets}" var="w" itemLabel="#{w.name}" itemValue="#{w}"/>
</h:selectOneMenu>


В тепершнем моём случае это не помогает... Скорее всего вы правы в плане причины, но я не могу понять почему не проходит решение, которое я нашёл в прошлом посте?
P.S. PrependId ни на что не повлиял...  smile 
Добавлено @ 10:29
Цитата(Stolzen @ 27.5.2011,  09:46)
А как сам ajax запрос отправляется? разве js не нужен?

Нужен, но он где-то внутри PrimeFaces зашит - если я правильно понимаю зачем вообще этот фреймфорк нужен...

Это сообщение отредактировал(а) isabsent - 27.5.2011, 10:38
PM MAIL   Вверх
MisterCleric
Дата 27.5.2011, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Я так понял ты не первый, кто с этим столкнулся:
http://www.google.com/search?q=primefaces+...+from+datatable


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
En_t_end
Дата 27.5.2011, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Ок,
Попробуй так:
Код

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Title</title>
    </h:head>
    <h:body>
        <h:form id="myBestFormID" prependId="false">  
            <h:messages globalOnly="true" />      
            <h:outputText id="noStringsText" value="No Strings Found" rendered="#{controller.strings.rowCount == 0}"/>
            <p:dataTable id="strings" value="#{controller.strings}" var="string" rendered="#{controller.strings.rowCount > 0}">
                <f:facet name="header">Strings Table<br/></f:facet>
                <p:column>
                    <f:facet name="header">Note</f:facet>
                    #{string}
                </p:column>
                <p:column>
                    <f:facet name="header">Action</f:facet>
                    <p:commandLink id="cancel" value="Cancel" update="myBestFormID" actionListener="#{controller.cancelListener}"/> 
                </p:column>
            </p:dataTable>  
        </h:form>        
    </h:body>
</html


У меня все dataTable располагаются в индивидуальных формах. Если надо обновить dataTable, обновляется форма.

Это сообщение отредактировал(а) En_t_end - 27.5.2011, 12:40
PM MAIL ICQ Skype GTalk Jabber   Вверх
isabsent
Дата 27.5.2011, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(En_t_end @ 27.5.2011,  11:00)
Ок,
Попробуй так:

У меня все dataTable располагаются в индивидуальных формах. Если надо обновить dataTable обновляется форма.

Ваш вариант работает!! Только не понял пока - он только форму обновляет или всю страницу...
То, что надо делать именно через обновление формы - это где-то написано или вы сами пришли к этому способу из-за глюков прямого обновления таблицы? 

Добавлено @ 11:12
Цитата(MisterCleric @ 27.5.2011,  10:50)
Я так понял ты не первый, кто с этим столкнулся:
http://www.google.com/search?q=primefaces+...+from+datatable

Ого... Пошёл читать... 

Это сообщение отредактировал(а) isabsent - 27.5.2011, 11:15
PM MAIL   Вверх
En_t_end
Дата 27.5.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Цитата(isabsent @  27.5.2011,  15:11 Найти цитируемый пост)
То, что надо делать именно через обновление формы - это где-то написано или вы сами пришли к этому способу из-за глюков прямого обновления таблицы? 

Не помню, я это делал пару месяцев назад.
PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.