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


Автор: skhilkov 24.7.2007, 11:38
Здравствуйте форумчане!
Нашел я значит хороший компонент в библиотеке richfaces, называется suggestionbox, но никак не могу понять как им пользоваться.... Погуглил, нашел пример использования, но и его не понял (( Вот ссылка на этот самый пример - http://livedemo.exadel.com/richfaces-demo/richfaces/suggestionBox.jsf. Вот конкретные вещи, которых я не понимаю - в этом примере у компонента suggestionbox есть параметр var - непонятно что означает и откуда берется....... В примере написано его значение - result, но откуда это взялось...... и опять же этот result упоминается в строчке
 
Код

<h:outputText value="#{result.text}" />

вопрос - что это за result, откуда он взялся и с чем его едят? ))
Порывшись в документации увидел следующую строчку -
Цитата

A request-scope attribute via which the data object for the current row will be used when iterating

Вышеприведенное описание так и не помогло(может в силу знания английского) разобраться что это за объект, какого он типа и где его нужно объявлять(если вообще нужно).......

Убил уже больше полдня на эту головоломку...... помогите плизз советом или работающим примером..... очень надо.... (с меня пиво  smile )

Автор: necromancer 24.7.2007, 11:47
Прежде чем братся за AJAX для JSF нужно хотя бы немного знать этот самый JSF!
Строчка:
#{result.text}
означает что берется поименновая переменная, хранящаяся в ParameterMap FacesContext (так называемый бин)и у него свойство text,
через метод getText()

Погугли еще и найди документацию о том как конфигурировать бины об их scope и о том как извлекать данные.
Вот маленький пример конфигурации бина в файлу faces-config.xml:
Код

   <managed-bean>
       <managed-bean-name>security</managed-bean-name>
       <managed-bean-class>ru.freecode.jsf.security.Security</managed-bean-class>
       <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>

Бин представляет собой обычный Java класс с методами get и set через которые компоненты имеют доступ к данным на JSP страницах

PS Может создать подраздел JSF и меня в комодераторы? smile

Автор: skhilkov 24.7.2007, 11:54
necromancer,  то что ты написал я знаю, только вот если зайти http://maven.exadel.com/org/richfaces/suggestionbox-sample/3.0.1-SNAPSHOT/ и скачать пример, то ты не найдешь описания этого самого бина в файле конфигурации..... поэтому я и не понимаю что это за бин такой, какого он типа и с чем его едят  smile 

Автор: necromancer 24.7.2007, 13:24
ну не написали они об этом, что ж теперь. 
В чем проблема то? не знаешь какой бин подставить или какие параметры получить? 

Попробуем разобратся вместе
var - A request-scope attribute via which the data object for the current row will be used when iterating

те в вар для suggestionbox нужно подставить название переменной, которую ты потом будешь использовать внутри suggestionbox для отображения выбранного элемента, в примере это 
<h:outputText value="#{result.text}" />

те когда происходит выборка элементов и ты уже выбрал какойт о элемент  suggestionbox получает не объект типа String а некий пользовательский объект, который поступен через request-scope attribute проименованую в:
<suggestionbox  var="result"...
у которого в свою очередь есть свойство text

так понятнее?

Автор: skhilkov 24.7.2007, 15:01
necromancer
я так пробовал - не работает..... вот код - 
Код

 <h:inputText  id="text" style="left: 48px; top: 120px; position: absolute; width: 215px" value="#{MyPageBean.property}"/>
                                <rich:suggestionbox border="1" first="0" for="text" frequency="0" height="100" minChars="1" rows="0" rules="none"
                                    suggestionAction="#{AddItemFlatSale.autocomplete}" var="result" width="100">
                                    <h:column>
                                        <h:outputText value="#{result.text}"/>
                                    </h:column>
                                </rich:suggestionbox>


Вот объявление бина - 
Код

<managed-bean>
        <managed-bean-name>result</managed-bean-name>
        <managed-bean-class>tools.MyTestAjaxClass</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>


А вот его класс - 
Код

public class MyTestAjaxClass {

    String text;

    public String getText()
    {
        return text;
    }

    public void setText(String text)
    {
        this.text = text;
    }
    public MyTestAjaxClass()
    {
    
    }

}


Так вот - это не работает, причем нет никаких ошибок.....  Может накатаешь примерчик использования сего компонента?

Автор: Maksym 24.7.2007, 15:14
MyPageBean, AddItemFlatSale есть?

Добавлено через 4 минуты и 46 секунд
Цитата(skhilkov @  24.7.2007,  15:01 Найти цитируемый пост)
Так вот - это не работает, причем нет никаких ошибок..... 

Если не работает, то какие то следы должны быть, это же не любительский софт.. Лог Tomcat просмотел?

Автор: necromancer 24.7.2007, 18:06
Если будет время чуть позже попробую или уже только после 6-го сорри :-(

Автор: skhilkov 25.7.2007, 05:18
Maksym, в логах ничего не пишет, поскольку этот самый компонент все таки записывается в страницу:
Код

<input id="form1:textFieldStreet" type="text" name="form1:textFieldStreet" style="left: 72px; top: 24px; position: absolute; width: 191px" /><input id="form1:text" type="text" name="form1:text" value="" style="left: 48px; top: 120px; position: absolute; width: 215px" /><div id="form1:_id0" class="dr-sb-common-container rich-sb-common-container" style="display:none; z-index: 201;width:100px;height:100px;"><div class="dr-sb-ext-decor-1 rich-sb-ext-decor-1"><div class="dr-sb-ext-decor-2 rich-sb-ext-decor-2" style=";; border-width: 1px  1px  1px  1px ;"><table border="0" cellpadding="0" cellspacing="1" class="dr-sb-ext-decor-3 rich-sb-ext-decor-3"><tbody><tr><td><div class="_suggestion_size_ dr-sb-overflow rich-sb-overflow" style="width:96px;height:96px;"><table id="form1:_id0:suggest" border="1" rules="none"><tbody></tbody></table></div></td></tr></tbody></table></div></div><div class="dr-sb-shadow rich-sb-shadow" style="opacity:0.1; filter:alpha(opacity=10);top: 4; left: 4"></div><script> new RichFaces.Suggestion('_viewRoot','form1','form1:text','form1:_id0',null,{'minChars':'1','height':'100','param':'inputvalue','popup':'form1:_id0','width':'100','frequency':0.0,'parameters':{'form1:_id0':'form1:_id0'} ,'eventsQueue':'form1:_id0','entryClass':'richfaces_suggestionEntry','rows':0,'actionUrl':'/realty/faces/AddItemFlatSale.jsp'} );


Зато я посмотрел в консоль ошибок фаейрфокса и увидел вот что:
Код

RichFaces is not defined

Теперь буду ковырять в эту сторону.....

Автор: skhilkov 25.7.2007, 07:00
Посмотрел исходники онлайн примера, увидел там кучу ссылок на ресурс a4j.res: 
Код

<script type='text/javascript' src='/richfaces-demo/a4j.res/org.ajax4jsf.framework.resource.PrototypeScript.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/scripts/togglePanel.js.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org.ajax4jsf.framework.ajax.ImageCacheScript.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org/richfaces/renderkit/html/scripts/browser_info.js.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org/ajax4jsf/renderkit/html/scripts/form.js.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/scripts/tabPanel.js.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org.ajax4jsf.framework.resource.SmartPositionScript.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org/richfaces/renderkit/html/scripts/scriptaculo.js.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org/richfaces/renderkit/html/scripts/suggestionbox.js.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/script/SliderScript.js.jsf'></script><script type='text/javascript' src='/richfaces-demo/a4j.res/org/richfaces/renderkit/html/scripts/events.js.jsf'></script>


А у меня нет такого..... где это взять???? Ничего не пойму, вроде либы подключил все нормально, все компоненты и из ajax4jsf и из richfaces видны в подсказке, все компилится нормально....... в чем фишка????

Автор: Maksym 25.7.2007, 10:49
skhilkov
А попробуй добавь аналогичное подключение java script'ов на своей странице..

Автор: skhilkov 25.7.2007, 13:13
Maksym,   а смысл? у меня в приложении нет того файла на который они(скрипты) ссылаются.....

Автор: Maksym 25.7.2007, 16:28
skhilkov
Откуда знаешь? smile  Посмотри, может такие скрипты есть jar'е richfaces'а.
Я с richfaces не работал, но знаю что, например, у icefaces все ресурсы запакованы в jar, а браузеру они выдаются не напрямую, а через icefaces'овый сервлет. Думаю, что у richfaces запросы тоже обрабатываются каким-то специальным слоем.. там и js'ы могут раздавать... 

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