我在XPage上使用Dojo Filtering Select控件,并希望在保存XPage时保存标签和值。我可以将两个值保存到相同或单独的字段中吗?
答案 0 :(得分:2)
我使用Java bean来保存这类信息。它将使以后翻译页面变得更加容易。因此,我将各种选项定义为静态地图:
private static final Map<String, String> userInterestLabels;
static {
userInterestLabels = new HashMap<String, String>();
userInterestLabels.put("1", "Environment");
userInterestLabels.put("2", "Sience");
userInterestLabels.put("3", "Regulations");
userInterestLabels.put("4", "Generel interest");
}
然后我有一个方法来返回该字段的选择项列表:
public List<SelectItem> getListUserInterests() {
List<SelectItem> selectItems = new ArrayList<SelectItem>();
for (Map.Entry<String, String> item : userInterestLabels.entrySet()) {
selectItems.add(new SelectItem(item.getKey(), item.getValue()));
}
return selectItems;
}
在我的XPage中,我使用表达式语言(不需要SSJS)来引用此方法:
<xe:djFilteringSelect id="inputRoleInterest" value="#{User.interest}"
disableValidators="true" hasDownArrow="true" immediate="true">
<xp:selectItems>
<xp:this.value><![CDATA[#{User.listUserInterests}]]></xp:this.value>
</xp:selectItems>
现在,当您提交此页面时,User bean有一个通过绑定#{User.interest}调用的方法“setInterest()”。在该方法中,您可以根据此字段返回的值获取标签。我有这样的方法:
public String getUserInterestLabel(String interest) {
String label = userInterestLabels.get(interest);
return (null == label) ? "" : label;
}
从用于生成选择项目的同一地图返回标签。现在,您可以将该标签保存在另一个字段中 - 或者您想要用它做什么; - )
public void setInterest(String interest) {
this.interest = interest;
this.interestLabel = getUserInterestLabel(interest);
}
/约翰
答案 1 :(得分:1)
您想将文档的字段设置为当前所选值的相应标签。
下面的代码适用于定义的xp:selectItem
项和基于属性,视图,bean或其他源的所有类型的计算xp:selectItems
定义。
服务器端JavaScript解决方案
在onclick事件中添加以下SSJS代码以提交按钮:
<xp:this.action><![CDATA[#{javascript:
var select = getComponent('djFilteringSelect1');
var list = select.getChildren();
var value = select.getValue();
var label = "";
for (var i = 0; i < list.length && label === ""; i++) {
print (i);
if (typeof list[i] === 'com.ibm.xsp.component.UISelectItemEx') {
if (list[i].getItemValue() === value) {
label = list[i].getItemLabel();
}
} else if (typeof list[i] === 'com.ibm.xsp.component.UISelectItemsEx') {
items = list[i].getValue();
for (var k = 0; k < items.length && label === ""; k++) {
if (items[k].getValue() === value) {
label = items[k].getLabel();
}
}
}
}
document1.setValue("label", label)
}]]></xp:this.action>
它遍历所有已定义的Dojo Filtering Select控件的selectItems
,查找所选值并将相应的标签写入文档的字段“label”。
客户端JavaScript解决方案
创建一个隐藏的输入字段,该字段连接到文档的字段“label”:
<span style="display:none">
<xp:inputText
id="fieldLabel"
value="#{document1.label}">
</xp:inputText>
</span>
在onclick事件中添加以下CSJS代码以提交按钮:
<xp:this.script><![CDATA[XSP.getElementById("#{id:fieldLabel}").value =
dijit.byId('#{id:djFilteringSelect1}').get('displayedValue')]]>
</xp:this.script>
它将输入字段设置为当前所选值的标签,然后将其写入文档的字段“label”。