在嵌套重复控件中使用HashMap获取基于键的值

时间:2018-06-04 15:35:42

标签: xpages-ssjs

在自定义控件上,我正在使用HashMap(在cc的beforePageLoad事件中加载)将数据传递到嵌套的重复控件,但我无法弄清楚如何从地图中获取特定值。 (我是一个长期的Notes开发者,但是一个Xpages / Java noobie。)

我正在模拟Notes分类视图,但我必须使用派生数据,而不是视图。数据的格式是(所有字符串):

data

我通过 viewScope.categoryArray 将类别作为简单数组分别传递给外部重复,然后在 viewScope.catDataMap 中传递地图。外部重复内的按钮显示/隐藏包含嵌套重复的子面板。为了测试,我试图根据类别(例如,category1)在最后计算的文本字段(id = showValue)中显示相应的数据字符串(例如,name1 ^ nextDueDate1 ^ lastCompletedDate1):

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

(请注意,我在我的示例中省略了一些额外的东西,比如当隐藏panelData等时)。在通过尝试直接访问 map 而无法获取数据后,我发现了post表示您必须使用 map.entrySet()。但是,我浏览了HashMapSet的Java文档,但无法弄清楚要使用的方法。我想要的只是LS的等价物

<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>

有人可以指出我正确的方向或提出替代解决方案吗? (我可以在Javascript中更简单地执行此操作吗?)

1 个答案:

答案 0 :(得分:1)

看起来你正在为嵌套的重复控件中的值返回错误的东西。而不是return map.entrySet();你应该使用return map.get(category);,它应该返回你可以解析的值字符串。