Ich habe mal dein SO-Beispiel modifiziert.
1. Das inputHidden - Element wird für den Transport der Nachricht verwendet
2. Der onItemClick - EventHandler hat eine ID bekommen, um in ansprechen zu können
3. Die übertragene Nachricht ist hardcoded; da es aber CSJS ist, kannst Du hier deine Eingabe vom User abfragen
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:button
value="Label"
id="button1">
<xp:eventHandler
event="onclick"
submit="false">
<xp:this.script><![CDATA[
XSP.openMenu(thisEvent,#{javascript:getComponent('popupMenu').getMenuCtor()});
]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<xe:popupMenu
id="popupMenu">
<xe:this.treeNodes>
<xe:basicLeafNode
label="menu item 1"
submitValue="mi1">
<xe:this.onClick>
<![CDATA[
XSP.getElementById('#{id:inputHiddenMessage}').value = 'Message Menu 1';
XSP.setSubmitValue('mi1');
XSP.fireEvent(arguments[0], '#{id:onItemClick}', '#{id:popupMenu}', null, true, 2, null);
]]>
</xe:this.onClick>
</xe:basicLeafNode>
</xe:this.treeNodes>
<xp:eventHandler
event="onItemClick"
submit="true"
refreshMode="complete"
id="onItemClick">
<xe:this.action>
<![CDATA[#{javascript:
print("Message: " + requestScope.message);
}]]>
</xe:this.action>
</xp:eventHandler>
</xe:popupMenu>
<xp:inputHidden
id="inputHiddenMessage"
value="#{requestScope.message}"></xp:inputHidden>
</xp:view>