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


Автор: Vofka 18.12.2006, 17:21
Мне необходимо создать дерево с линками при нажатии на которые будет меняться содержание таблицы.Как создать дерево и таблицу я знаю но вот как их связать! smile 

вот дерево:

Код

  <af:tree value="#{bindings.findAllStdSoft1.treeModel}"
                         var="node" binding="#{backing_load_graf.tree1}"
                         id="tree1">
                  <f:facet name="nodeStamp">
                    <af:commandLink binding="#{backing_load_graf.outputText1}"
                                    id="outputText1" text="#{node}"
                                    action="#{backing_load_graf.outputText1_action2}"/>
                  </f:facet>
                </af:tree>


вот таблица


Код

<af:table value="#{bindings.findAllStdTest1.collectionModel}"
                      var="row" rows="#{bindings.findAllStdTest1.rangeSize}"
                      first="#{bindings.findAllStdTest1.rangeStart}"
                      emptyText="#{bindings.findAllStdTest1.viewable ? 'No rows yet.' : 'Access Denied.'}"
                      binding="#{backing_load_graf.table1}" id="table1">
              <af:column headerText="#{bindings.findAllStdTest1.labels.beginDate}"
                         sortProperty="beginDate" sortable="false"
                         binding="#{backing_load_graf.column1}" id="column1">
                <af:outputText value="#{row.beginDate}"
                               binding="#{backing_load_graf.outputText2}"
                               id="outputText2">
                  <f:convertDateTime pattern="#{bindings.findAllStdTest1.formats.beginDate}"/>
                </af:outputText>
              </af:column>
              <af:column headerText="#{bindings.findAllStdTest1.labels.comission}"
                         sortProperty="comission" sortable="false"
                         binding="#{backing_load_graf.column2}" id="column2">
                <af:outputText value="#{row.comission}"
                               binding="#{backing_load_graf.outputText3}"
                               id="outputText3"/>
              </af:column>
              <af:column headerText="#{bindings.findAllStdTest1.labels.endDate}"
                         sortProperty="endDate" sortable="false"
                         binding="#{backing_load_graf.column3}" id="column3">
                <af:outputText value="#{row.endDate}"
                               binding="#{backing_load_graf.outputText4}"
                               id="outputText4">
                  <f:convertDateTime pattern="#{bindings.findAllStdTest1.formats.endDate}"/>
                </af:outputText>
              </af:column>
                          <af:column headerText="#{bindings.findAllStdTest1.labels.results}"
                         sortProperty="results" sortable="false"
                         binding="#{backing_load_graf.column5}" id="column5">
                <af:outputText value="#{row.results}"
                               binding="#{backing_load_graf.outputText6}"
                               id="outputText6"/>
              </af:column>

            </af:table>

Автор: alexsmirnov 19.12.2006, 21:35
Лучше всего в TreeModel для ноды сделать action метод ( например, в базовом классе прописать ), в котором будет выставляться нужная модель для таблицы :
Код

<af:commandLink binding="#{backing_load_graf.outputText1}"
                                    id="outputText1" text="#{node}"
                                    action="#{node.selectDetail}"/>

Естественно, бин дерева должен иметь доступ к бину таблицы.
Если с моделью не хочется, то тогда к commandLink добавить параметр с каким-либо ключом из ноды,

Автор: Vofka 25.12.2006, 18:03
Сделал через commandLink все работает.Пришлось добавить поле id в атрибуты.Теперь проблема в следующем если отображать через #node то верхний элемент дерева отображается  нормально а листья дерева отображают два атрибута id и то поле которое мне нужно.В туориале прочитал что надо использовать свитч чтобы в зависимости от ноды менять ее текст.
 Вот что-то типа этого:
Код

<af:switcher facetName="#{backingSRManage.treeLevel[node.hierType.viewDefName]}">
<f:facet name="StaffNode">
<af:commandLink text="#{node}"
action="#{backing_SRManage.staffLinkDrilldown}"
actionListener="#{bindings.setCurrentStaffRowWithKey.execute}"/>
</f:facet>
<f:facet name="ServiceRequestsNode">
<af:panelGroup>
<af:outputText value="[#{node.Status}] "/>
<af:commandLink text="#{node.ProblemDescription}"
action="#{backing_SRManage.problemLinkDrilldown}"
actionListener="#{bindings.setCurrentProblemAndAssigneeRows.execute}"/>
</af:panelGroup>
</f:facet>
</af:switcher> 

далее в туториале  написано что В faces-config страницы надо добавить

Код

<managed-bean>
<managed-bean-name>backing_SRManage</managed-bean-name>
...
<managed-property>
<property-name>treeLevel</property-name>
<map-entries>
<key-class>java.lang.String</key-class>
<value-class>java.lang.String</value-class>
<map-entry>
<key>oracle.srdemo.model.queries.StaffWithOpenRequests</key>
<value>StaffNode</value>
</map-entry>
<map-entry>
<key>oracle.srdemo.model.queries.OpenOrPendingServiceRequests</key>
<value>ServiceRequestsNode</value>
</map-entry>
</map-entries>
</managed-property>
</managed-bean>

Так вот когда я попытался сделать подобное в своем проекте у меня вылезла ошибка что невозможно установить значение для treeLevel.Что нужно исправить или добавить?

Добавлено @ 18:05 
node.hierType.viewDefName возвращает как раз viewDefName засчет которого было сформирована нода  а вот эта штука целиком несрабатывает
 
Код

backingSRManage.treeLevel[node.hierType.viewDefName]

Автор: Vofka 26.12.2006, 17:31
Сделал по другому.

Код

 <af:tree value="#{bindings.findAllStdSoft1.treeModel}"
                         var="node" binding="#{backing_nagruz.tree1}"
                         id="tree1">
                  <f:facet name="nodeStamp">
                    <h:panelGroup binding="#{backing_nagruz.panelGroup1}"
                                  id="panelGroup1">
                      <af:commandLink binding="#{backing_nagruz.outputText1}"
                                      id="outputText1" text="#{node.id}"
                                      rendered="#{node.id!=null}">
                        <af:setActionListener to="#{bindings.param_idBIND.inputValue}"
                                              from="#{node.id}"/>
                      </af:commandLink>
                      <af:commandLink text="#{node}"
                                      binding="#{backing_nagruz.commandLink1}"
                                      id="commandLink1"
                                      rendered="#{node.id==null}"/>
                    </h:panelGroup>
                  </f:facet>
                </af:tree>


 smile 

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