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


Автор: Sleepy_PIP 28.1.2005, 19:10
Собственно никак не соображу - каким образом из бина перевывести страничку юзеру. При условии что это valueChange метод.
Т.е. идея простая - при чекании некоего чек-бокса надо перерисовать страничку запретив некоторые контролы (ну или выставив их в конкретные значения).
Как? как собственно заставить переисоваться страничку?
У меня такое ощущение что никак ... smile.

Автор: Alt 3.2.2005, 00:05
Не совсем понял, что значит перевывести из бина.
Чтобы при чекании чекбокса перевывести страницу надо поставить onchange="this.form.submit( );" типа
<h:selectBooleanCheckbox onchange="this.form.submit( );" valueChangeListener="#{.....}" />
Вообще посмотри здесь - http://www.onjava.com/pub/a/onjava/excerpt/JSF_chap8/index1.html?page=2 может найдешь что-нибудь полезное.


Автор: Sleepy_PIP 3.2.2005, 08:20
Цитата(Alt @ 3.2.2005, 00:05)
Не совсем понял, что значит перевывести из бина.
Чтобы при чекании чекбокса перевывести страницу надо поставить onchange="this.form.submit( );" типа
<h:selectBooleanCheckbox onchange="this.form.submit( );"  valueChangeListener="#{.....}" />
Вообще посмотри здесь - http://www.onjava.com/pub/a/onjava/excerpt/JSF_chap8/index1.html?page=2 может найдешь что-нибудь полезное.

Вот. вот этого не хватало - this.form.submit( )
Спасибо!
но это еще не все.
Со стороны дергаем бин через какую-то протерть и хочется что-б при этом отображенная страничка перерисовалась ...

Автор: Sleepy_PIP 3.2.2005, 12:09
ага! угу, счаз!
не все так просто оказывается.
<af:selectBooleanCheckbox value="#{ManPage.pFindInOnlyDir}" label="Искать только в каталогах " immediate="true" onchange="this.form.submit( );" valueChangeListener="#{ManPage.ChL1}"> </af:selectBooleanCheckbox>

this.form.submit( ); - срабатывает только 1 раз или вообще не срабатывает smile(.
точнее так.
Первый запуск - кликаем по чек-боксу - ничего. тоесть вообще ничего - и чекбокс не чекится.
Повторные клики на нем-же приводят только к изменению значения чекбокса.
Листенер не вызывается. соотв. сабмит формы отсудствует.

Автор: Sleepy_PIP 3.2.2005, 12:39
нормально так ... на рез. странице вообще нет this.form..submit() smile((.

Автор: Sleepy_PIP 3.2.2005, 13:28
а вот так:
<h:selectBooleanCheckbox value="#{ManPage.pFindInOnlyDir}" immediate="true" onchange="this.form.submit();" valueChangeListener="#{ManPage.ChL1}" id="aa2" title="Искать только в каталогах "> </h:selectBooleanCheckbox>
эвент листенер срабатывает, но никаких изменений на форме не отображается. более того - форма не перевыводится. т.е.
Код

       FacesContext.getCurrentInstance().renderResponse();

не более чем пустой звук smile(.
А почему???

причем интересно - пустой звук в IE, а во встроенном браузере (в JBuilder2005) - через раз.
т.е. шелкаем - ничего. щелкаем еще раз - все перевыводится ... и эвент срабатывает по коду бина.
А в IE - вообще все до фонаря. и эвент не срабатывает.
хм. а скрипты у меня разрешены однако!

Автор: Sleepy_PIP 3.2.2005, 13:47
не, ну вообще финишь smile
Код

       <af:panelGroup type="vertical">
         <af:panelGroup rendered="#{ManPage.pPar1Rendered}">
           <af:selectBooleanCheckbox value="#{ManPage.pFindInFiles}" label="Искать в именах и расширениях файлов">            </af:selectBooleanCheckbox>
           <af:selectBooleanCheckbox value="#{ManPage.pFindInDir}" label="Искать в полных именах каталогов" rendered="#{ManPage.reender1}">            </af:selectBooleanCheckbox>
         </af:panelGroup>
         <af:panelBox>
           <h:selectBooleanCheckbox value="#{ManPage.pFindInOnlyDir}" immediate="true" onchange="this.form.submit();" valueChangeListener="#{ManPage.ChL1}" id="aa2" title="Искать только в каталогах ">            </h:selectBooleanCheckbox>

           <af:selectBooleanCheckbox value="#{ManPage.pFindInOnline}" label="Искать только по online FTP">            </af:selectBooleanCheckbox>
         </af:panelBox>
         <af:inputText label="Колл-во строк результата на странице" maximumLength="3" id="RowsOnPage" value="#{ManPage.pRowsOnPage}" columns="3">
           <af:validateRegExp pattern="[0-9]*"/>
           <f:validateLongRange maximum="100"/>
         </af:inputText>
       </af:panelGroup>



так вот - в IE ManPage.ChL1 срабатывает не на чекании id="aa2", а на чекании
Код

           <af:selectBooleanCheckbox value="#{ManPage.pFindInFiles}" label="Искать в именах и расширениях файлов">            </af:selectBooleanCheckbox>
           <af:selectBooleanCheckbox value="#{ManPage.pFindInDir}" label="Искать в полных именах каталогов" rendered="#{ManPage.reender1}">            </af:selectBooleanCheckbox>



вот так вот!

видимо я глубоко где-то просел. в смысле ошибаюсь.
Кто-нито может помочь?

попробовал подключится не на oncange а на onclick - поведение _точно_ такое-ж ...
фигня какая-то smile.
не, ну смех и грех - во строенном браузере фигня, а в IE теперь хорошо все отрабатывается (если на onclick вешаться),.....
ох, как-ж мне все это не нравится smile((

Автор: igon 3.2.2005, 21:01
Покажи не jsf, а html исходник. ИМХО, все эти listener на bin юзеру(html) по барабану и вообще напрямую не доступны.

HTML, генерируемая из myJSF.jsf и подлежащая перезагрузке, должна выглядеть примерно так:
Код

<head>
<script>
function doReload(){
 document.myForm.action = "myJSF.jsf";
 document.myForm.submit();

}
</script>

</head>
<body>
<form name="myForm" action="" method="post">
...
<input type="checkbox" onclick="doReload();">
...
</form>
</body>


1. Обрати внимание на обязательность наличия тега <form>, без него submit() будет делать неизвестно что.
2. Я не уверен в последовательности действий после onClick: сначала ставится/снимается галка, а потом вызывается функция, или наоборот. Если сначала функция, то до галки дело не дойдет - после submit() отправляется запрос или все просто останавливается (как, похоже, в твоем случае). Если до галки дело не дошло - ставь/снимай ее в функции.

Автор: Sleepy_PIP 4.2.2005, 00:58
Спасибо!
интуитивно-экспериментально нашел работающий вариант.
выглядит так:
Код

       <af:panelGroup type="vertical">
         <af:panelGroup rendered="#{ManPage.pPar1Rendered}">
           <af:selectBooleanCheckbox value="#{ManPage.pFindInFiles}" label="Искать в именах и расширениях файлов">            </af:selectBooleanCheckbox>
           <af:selectBooleanCheckbox value="#{ManPage.pFindInDir}" label="Искать в полных именах каталогов" rendered="#{ManPage.reender1}">            </af:selectBooleanCheckbox>
         </af:panelGroup>
         <af:panelBox>
           <af:selectBooleanCheckbox value="#{ManPage.pFindInOnlyDir}" immediate="true" valueChangeListener="#{ManPage.ChL1}" id="aa1" label="Искать только в каталогах " onclick="this.form.submit();">            </af:selectBooleanCheckbox>
           <af:selectBooleanCheckbox value="#{ManPage.pFindInOnline}" label="Искать только по online FTP">            </af:selectBooleanCheckbox>
         </af:panelBox>
         <af:inputText label="Колл-во строк результата на странице" maximumLength="3" id="RowsOnPage" value="#{ManPage.pRowsOnPage}" columns="3">
           <af:validateRegExp pattern="[0-9]*"/>
           <f:validateLongRange maximum="100"/>
         </af:inputText>
       </af:panelGroup>



т.е. отрабатываю onClick - при этом листенер:
Код

//=============================================================================
   public void ChL1(ValueChangeEvent ev)
   {
       _FindInOnlyDir=!_FindInOnlyDir;
       if(_FindInOnlyDir)
           _Par1Rendered=false;
       else
           _Par1Rendered=true;
       FacesContext.getCurrentInstance().renderResponse();
   }




срабатывает успешно и везде.
Галка в чекбоксе ставится правильно.
в рез. HTML-е присудствует this.form.submit();
но только если на onClick. на onChange - в рез. HTML-е this.form.submit(); - отсудствует.
Пробую понять почему так ...

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