在嵌套重复控件中使用 HashMap 根据键获取值
Get value based on key using HashMap in nested repeat controls
在自定义控件上,我使用 HashMap(在 cc 的 beforePageLoad 事件中加载)将数据传递到嵌套的重复控件中,但我不知道如何从映射中获取特定值。 (我是一个长期的 Notes 开发者,但是 Xpages/Java 菜鸟。)
我正在模拟 Notes 分类视图,但我必须使用派生数据,而不是视图。数据格式为(所有字符串):
key data
--- ----
category1 name1^nextDueDate1^lastCompletedDate1
category2 name2^nextDueDate2^lastCompletedDate2
category3 name3^nextDueDate3^lastCompletedDate3
我通过 viewScope.categoryArray 将类别作为简单数组分别传递给外部重复,并在 viewScope.catDataMap 中传递地图。外部重复内的按钮 displays/hides 包含嵌套重复的子面板。为了进行测试,我尝试根据类别(例如,category1)在最后一个计算的文本字段(id=showValue)中显示相应的数据字符串(例如,name1^nextDueDate1^lastCompletedDate1):
<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 that said you have to use map.entrySet() instead. However, I looked through the Java documentation for both HashMap and Set 并且无法弄清楚该使用什么方法。我想要的只是
的 LS 等价物
Dim catData as String
catData = catDataMap("category1")
print catData 'name1^nextDueDate1^lastCompletedDate1
有人可以指出正确的方向或提出替代解决方案吗? (我可以在 Javascript 中更简单地做到这一点吗?)
看起来您 return 为嵌套重复控件中的值输入了错误的内容。而不是 return map.entrySet();
你应该使用 return map.get(category);
应该 return 然后你可以解析的值的字符串。
在自定义控件上,我使用 HashMap(在 cc 的 beforePageLoad 事件中加载)将数据传递到嵌套的重复控件中,但我不知道如何从映射中获取特定值。 (我是一个长期的 Notes 开发者,但是 Xpages/Java 菜鸟。)
我正在模拟 Notes 分类视图,但我必须使用派生数据,而不是视图。数据格式为(所有字符串):
key data
--- ----
category1 name1^nextDueDate1^lastCompletedDate1
category2 name2^nextDueDate2^lastCompletedDate2
category3 name3^nextDueDate3^lastCompletedDate3
我通过 viewScope.categoryArray 将类别作为简单数组分别传递给外部重复,并在 viewScope.catDataMap 中传递地图。外部重复内的按钮 displays/hides 包含嵌套重复的子面板。为了进行测试,我尝试根据类别(例如,category1)在最后一个计算的文本字段(id=showValue)中显示相应的数据字符串(例如,name1^nextDueDate1^lastCompletedDate1):
<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 that said you have to use map.entrySet() instead. However, I looked through the Java documentation for both HashMap and Set 并且无法弄清楚该使用什么方法。我想要的只是
的 LS 等价物Dim catData as String
catData = catDataMap("category1")
print catData 'name1^nextDueDate1^lastCompletedDate1
有人可以指出正确的方向或提出替代解决方案吗? (我可以在 Javascript 中更简单地做到这一点吗?)
看起来您 return 为嵌套重复控件中的值输入了错误的内容。而不是 return map.entrySet();
你应该使用 return map.get(category);
应该 return 然后你可以解析的值的字符串。