Получить значение на основе ключа, используя HashMap во вложенных элементах повтора - PullRequest
0 голосов
/ 04 июня 2018

В пользовательском элементе управления я использую HashMap (загруженный в событие beforePageLoad для cc) для передачи данных во вложенный повторяющийся элемент управления, но я не могу понять, как получить конкретное значение из карты.(Я давний разработчик Notes, но нуби из Xpages / Java.)

Я имитирую категоризированное представление Notes, но мне нужно использовать производные данные, а не представление.Формат данных (все строки):

key         data
---         ----
category1   name1^nextDueDate1^lastCompletedDate1
category2   name2^nextDueDate2^lastCompletedDate2
category3   name3^nextDueDate3^lastCompletedDate3

Я передаю категории отдельно в виде простого массива во внешний повтор через viewScope.categoryArray , и я передаю карту в viewScope.catDataMap .Кнопка во внешнем повторении отображает / скрывает подпанель, содержащую вложенный повтор.Для тестирования я пытаюсь отобразить соответствующую строку данных (например, name1 ^ nextDueDate1 ^ lastCompletedDate1) в самом последнем вычисляемом текстовом поле (id = showValue) на основе категории (например, category1):

<xp:panel id="panelRepeat">
  <xp:repeat id="repeatCategory" value="#{viewScope.categoryArray}" var="category">
    <xp:button value="#{javascript:category}">
      <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="panelRepeat">
        <xp:this.action><![CDATA[#{javascript:viewScope.categoryDisplay = category}]]></xp:this.action>
      </xp:eventHandler>
    </xp:button>

    <xp:panel id="panelData" rendered="#{javascript:@IsMember(category, viewScope.categoryDisplay)}">
      <xp:repeat id="repeatDocData" var="catData">
        <xp:this.value>
          <![CDATA[#{javascript:var map:java.util.HashMap = viewScope.catDataMap;
            return map.entrySet()}]]>
        </xp:this.value>

        <xp:text id="showValue" escape="true" value="#{javascript:catData.???????}" />

      </xp:repeat>
    </xp:panel>

  </xp:repeat>
</xp:panel>

(обратите внимание, что в моем примере я пропустил кучу дополнительных вещей, например, когда panelData скрыт и т. Д.) После неудачного получения данных при попытке прямого доступа к map я обнаружил post , в котором говорится, что вы должны использовать map.entrySet () .Однако я просмотрел документацию по Java как для HashMap , так и Set и просто не могу понять, какой метод использовать.Все, что я хочу, это эквивалент LS

Dim catData as String
catData = catDataMap("category1")
print catData    'name1^nextDueDate1^lastCompletedDate1

Может кто-нибудь указать мне правильное направление или предложить альтернативное решение?(Могу ли я сделать это более просто в Javascript?)

1 Ответ

0 голосов
/ 05 июня 2018

Похоже, вы возвращаете неправильное значение для значения во вложенном элементе повтора.Вместо return map.entrySet(); вы должны использовать return map.get(category);, который должен возвращать строку значений, которую вы можете затем проанализировать.

...