在我的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>
我上面的代码comboBox1
将dojoType
设置为dojox.form.CheckedMultiSelect
,而comboBox2
是普通的组合框。单击按钮值comboBox2
将打印在控制台上,而对于comboBox1
,它将打印为空。
为什么会这样?我该怎么做才能从comboBox1
获得价值?
答案 0 :(得分:1)
我认为它与dojo如何重写此控件以实现此目的有关。如果您查看生成的源代码,则组合框类似于:
<select>
<option></option>
...
</select>
这不是dojo控件的呈现方式,它被分解为彼此内部的许多div我猜.getValue()只是不知道如何处理它。您需要使用dojo脚本执行此客户端。它似乎工作的方式是在一些div内部是一个带
的divdata-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>