0

私の XPage では、xp:comboBoxdojoType設定していdojox.form.CheckedMultiSelectます。それを使用して SSJS でその値を取得しようとすると、 がgetComponent("comboBox1").getValue()返されます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に出力されますが、null が出力されます。

なぜこれが起こるのですか?から値を取得するにはどうすればよいcomboBox1ですか?

4

2 に答える 2

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>
于 2012-06-29T12:11:13.960 に答える
1

これは、dojo がこのコントロールを書き換えてこれを実現する方法に関係があると思います。生成されたソースを見ると、コンボ ボックスは次のようになっています。

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

これは、Dojo コントロールがレンダリングされる方法ではなく、.getValue() がそれを処理する方法がわからないだけで、互いに多くの div に分割されます。Dojo スクリプトを使用して、このクライアント側を実行する必要があります。それが機能しているように見える方法は、いくつかのdivの中にdivがあることです

data-dojo-attach-point="wrapperDiv"

その div の中には、オプションごとに 1 つの多数の div があり、選択されたものの div には属性aria-selected="true"があります。これを検索して、内部から値を取得する必要があります。

それは、道場のドキュメントで値を引き出す方法を詳しく説明している何かを見つけることができない限りです (私にはできません)。

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

サイモンに感謝します。あなたは Dojo の書き直しについて完全に正しかったです。以下のコードを使用して、クライアント側の JavaScript を使用して、選択した値を取得できました。

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

イベントを使用して選択した値をフィールドに入れ、onClickそのフィールド値をサーバー側の JavaScript で取得しています。単純なことで多くの作業が必要なことは知っていますが、機能します。より良い解決策がある場合は、共有してください。

于 2012-06-29T08:54:16.913 に答える