| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JSF: проблема с custom tag-ом |
| Автор: trace 22.2.2006, 17:15 |
| добрый день, возникла следующая проблема. разработан некоторый jsf custom tag. он функционирует корректно, если его поместит просто в форму, но если его поместить в PanelGrid, то при сабмите формы(по кнопке либо javascript-ом), он отображается 2 раза. еще раз сабмитишь - 3 раза. еще раз - 4, и т.д. , и т.п. Может кто-то подскажет, в чем может быть проблема? |
| Автор: alexsmirnov 28.2.2006, 22:54 |
| Скорее всего, в методах saveState/restoreState забыли сохранить или восстановить состояние суперкласса то есть скорее всего проблемы в изменении id компонента между запросами |
| Автор: trace 1.3.2006, 12:44 | ||
У меня вообще не были переопределены saveState() и RestoreState(). Но добавление их в виде
ничего не изменило, к сожалению. Id компонента я получаю через String clientId = getClientId(context), при сабмите EncodeBegin вызывается несколько раз, и id при этом выдается тот же самый. Может в Save/RestoreState нужно добавить что-то еще? |
| Автор: alexsmirnov 4.3.2006, 13:25 |
| Тогда нужно более подробно про код для понимания. Разница с PanelGrid - он сам выводит дочерние компоненты, вместо вывода по тегам JSP. Когда встречается такое место - jsf пытается понять - остались ли компоненты старыми ил что-то на странице поенялось ( например- сработал <c:if > Для сравнения используются именно id компонентов, и если они не сохраняются ( после восстановления null ) - именно такое дублирование и происходит. Но это не единственная причина , возможны варианты Попробуй присвоить компоненту id в явном виде - если опять продублируются и не будет exception на duplicate id - ищи именно в этом направлении Если выругается - скорее где-то в JSP теге |
| Автор: trace 10.3.2006, 14:30 | ||||
| Id у меня и задается напрямую, это необходимый атрибут... в общем, думаю, лучше привести код: на jsp странице (неотносящиеся к делу атрибуты опущены)
UICustomerSelectTag(лишнее тоже опущено, основная идея в том, что ид берется из getClientId, и используется как id input-а):
Вот примерно так. Можете что-то посоветовать? |
| Автор: trace 10.3.2006, 15:31 |
| Еще один момент. Эта проблема 100% связана именно с заданием id тега, потому что в отсутствие этого атрибута удваивание не происходит. Однако, проблема в том что мне по функциональности никак без задания ид не обойтись... |
| Автор: trace 13.3.2006, 19:43 |
| В общем(может кому пригодится), проблема была таки в задании атрибута id для custom tag-а. Мне нужно было задавать id (фактически было несколько custom tag-ов, используемых в связке). Наверное, jsf как-то иначе анализирует теги при задании именно атрибута id... Anyway, заменой атрибута id на атрибут customerID(можно подставить что угодно |