在XPage中使用dojox.form.CheckedMultiSelect时无法获取值

时间:2012-06-29 05:49:02

标签: dojo xpages

在我的XPage中,我xp:comboBox dojoType设置为dojox.form.CheckedMultiSelect。当我尝试使用getComponent("comboBox1").getValue()在SSJS中获取其值时,它会返回null。如果我删除了dojoType,则代码可以正常运行。

这是完整的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:this.resources>
        <xp:dojoModule name="dojox.form.CheckedMultiSelect"></xp:dojoModule>
        <xp:styleSheet href="/.ibmxspres/dojoroot/dojox/form/resources/CheckedMultiSelect.css"></xp:styleSheet>
    </xp:this.resources>
    <xp:comboBox id="comboBox1" dojoType="dojox.form.CheckedMultiSelect">
        <xp:selectItem itemLabel="Untitled 1"></xp:selectItem>
        <xp:selectItem itemLabel="Untitled 2"></xp:selectItem>
        <xp:selectItem itemLabel="Untitled 3"></xp:selectItem>
    </xp:comboBox>
    <xp:comboBox id="comboBox2">
        <xp:selectItem itemLabel="Untitled 1"></xp:selectItem>
        <xp:selectItem itemLabel="Untitled 2"></xp:selectItem>
        <xp:selectItem itemLabel="Untitled 3"></xp:selectItem>
    </xp:comboBox>
    <xp:button value="Label" id="button1">
        <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:print("============ " + getComponent("comboBox1").getValue());
print("============ " + getComponent("comboBox2").getValue());}]]></xp:this.action>
        </xp:eventHandler>
    </xp:button>
</xp:view>

我上面的代码comboBox1dojoType设置为dojox.form.CheckedMultiSelect,而comboBox2是普通的组合框。单击按钮值comboBox2将打印在控制台上,而对于comboBox1,它将打印为空。

为什么会这样?我该怎么做才能从comboBox1获得价值?

2 个答案:

答案 0 :(得分:1)

我认为它与dojo如何重写此控件以实现此目的有关。如果您查看生成的源代码,则组合框类似于:

<select>
    <option></option>
    ...
</select>

这不是dojo控件的呈现方式,它被分解为彼此内部的许多div我猜.getValue()只是不知道如何处理它。您需要使用dojo脚本执行此客户端。它似乎工作的方式是在一些div内部是一个带

的div
data-dojo-attach-point="wrapperDiv"

并且在div内部是每个选项一个div,一个div的div具有属性aria-selected="true",你必须搜索它并从里面获取值。

除非您可以在dojo文档中找到详细说明如何提取值的内容(我不能)

2012年6月29日更新(Naveen):

感谢Simon,你对Dojo重写完全正确。我能够使用客户端javascript使用以下代码获取所选值:

dijit.byId("#{id:comboBox1}").get("value")

我使用onClick事件将所选值放在字段中,然后在服务器端javascript中获取该字段值。我知道很多工作都是为了一件简单的事情,但它确实有效。如果您有更好的解决方案,请分享。

答案 1 :(得分:1)

您引用的dojoType还没有SS getValue()。但是,使用dijit.byId(“id”)。getValue()获取值CS非常简单。借助hiddenInput,您可以获得解决方法。我粘贴了以下示例:

<xp:comboBox id="comboBox1" dojoType="dojox.form.CheckedMultiSelect">
    <xp:selectItem itemLabel="Untitled 1"></xp:selectItem>
    <xp:selectItem itemLabel="Untitled 2"></xp:selectItem>
    <xp:selectItem itemLabel="Untitled 3"></xp:selectItem>
</xp:comboBox>

<xp:inputHidden id="inputHidden1"></xp:inputHidden>

<xp:button value="Label" id="button5">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action><![CDATA[#{javascript:
            print("Submitting: " + getComponent("inputHidden1").getValue());
        }]]></xp:this.action>
        <xp:this.script><![CDATA[dojo.byId("#{id:inputHidden1}").value = dijit.byId("#{id:comboBox1}").getValue();]]></xp:this.script>
    </xp:eventHandler>
</xp:button>