【问题标题】:XPages - Dojo Filtering Select - save both label and valueXPages - Dojo 过滤选择 - 保存标签和值
【发布时间】:2013-11-06 13:52:20
【问题描述】:

我在 XPage 上使用 Dojo Filtering Select 控件,并希望在保存 XPage 时同时保存标签和值。我是否可以将这两个值保存到相同或单独的字段中?

【问题讨论】:

    标签: xpages xpages-ssjs


    【解决方案1】:

    我使用 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 有一个方法“setInterest()”,该方法通过绑定 #{User.interest} 调用。在该方法中,您可以根据从该字段返回的值获取标签。我有这样的方法:

        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);
    }
    

    /约翰

    【讨论】:

    • 谢谢,我会选择下面的 SSJS 解决方案,因为我觉得它更简单。
    【解决方案2】:

    您希望将文档的字段设置为当前选定值的相应标签。

    下面的代码适用于定义的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,查找选定的值并将相应的标签写入文档的“标签”字段。

    客户端 JavaScript 解决方案

    创建一个连接到文档字段“标签”的隐藏输入字段:

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

    它将输入字段设置为当前选定值的标签,然后将其写入文档的字段“标签”。

    【讨论】:

    • 我刚刚尝试过,但在行 if (list[i].getItemValue() === select.getValue()) {
    • 我扩展了我的 SSJS 代码并添加了一个简单的 CSJS 解决方案 - 希望一个解决方案对您有用。
    • 非常感谢。我刚刚测试了 SSJS 解决方案,它运行良好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多