如何将添加到列表框客户端的值存储到 sessionScope
How to store values added to a listbox client side to sessionScope
我有一个列表框,其中填充了客户端选项,我需要将此列表框中的值存储到 sessionScope。
这是我的列表框
<xp:listBox id="listBox1"></xp:listBox>
这是我用来填充列表框的jquery
$("[id$='listBox1']").append("<option value='"+ ret + "'>" + ret + "</option>")
这是我必须将列表框保存到 sessionScope 中的按钮
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:sessionScope.pending = getComponent("listBox1").getValue()}]]></xp:this.action>
</xp:eventHandler></xp:button>
出于某种原因,列表框值未保存到我的 sessionScope 中。如果我在 DDE 中预先填充列表框,它可以工作,但这不是我想要的。
- 我也尝试过将 listBox 绑定到数据源,但没有成功
- 我也尝试过 select 单击按钮之前的值
如何将客户端填充到我的 sessionScope 中的值获取。
要粘贴到新 Xpage 的完整代码,(您需要 jquery 或 bootstrap 主题)
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="d" formName="Main"></xp:dominoDocument>
</xp:this.data>
<xp:button value="ADD TO LISTBOX" id="button2">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[var ret = "Testin"
$("[id$='listBox1']").append("<option value='"+ ret + "'>" + ret + "</option>")]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<xp:listBox id="listBox1" value="#{sessionScope.pending}">
<xp:eventHandler event="onchange" submit="true" refreshMode="complete"></xp:eventHandler>
</xp:listBox>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="save" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:sessionScope.pending = getComponent("listBox1").getValue()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:text escape="true" id="computedField1" value="#{sessionScope.pending}"></xp:text>
</xp:view>
这项工作按设计进行:
<xp:listBox
id="listBox1"
value="#{sessionScope.pending}">
<xp:selectItem itemLabel="A"></xp:selectItem>
<xp:selectItem itemLabel="B"></xp:selectItem>
</xp:listBox>
<xp:button
value="OK"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete">
</xp:eventHandler>
</xp:button>
我知道,它不会用 JQuery 填充值,但应该没什么区别...
免责声明:模型更新可能存在问题 - 如果组件提交的值不是通过源定义的 - <xp:selectItem>
。这通常发生在组合框上 - 提交的值必须与 XPage 生成的任何值相匹配。
我想可以选择在本机预填充列表框选项。如果没有,请尝试解决方法:
您可以使用 CSJS 将选定的值放入绑定到 sessionScope 的隐藏输入中。那一个将被提交。请注意,绑定已从 listBox1
移至 inputHiden1
。
<xp:button
value="Refresh"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="inputHidden1">
<xp:this.script><![CDATA[var lb = dojo.byId("#{id:listBox1}");
var hi = dojo.byId("#{id:inputHidden1}");
hi.value = lb.options[lb.selectedIndex].innerHTML;]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<xp:inputHidden
id="inputHidden1"
value="#{sessionScope.pending}">
</xp:inputHidden>
将值从列表框复制到隐藏输入的脚本可以在列表框的 onChange 中 运行 以避免单击按钮的需要。
另请参阅:XPages - Client side code to set viewScope value?
这可以通过简单的 RPC 调用来完成。
在你的页面中添加一个RPC,在这个例子中我会考虑myRPC
作为服务名称。
为此 RPC 定义一个函数,将值数组作为输入。该函数只是将此数组设置在 sessionScope 变量中。在这个例子中,我将函数命名为 setScopeVariable
;
在为您的列表框构建值的客户端代码之后,只需调用此 RPC 函数。这里 listBoxValues
是一个包含值列表的数组:
myRPC.setScopeVariable(listBoxValues);
sessionScope 现在设置为正确的值。
这样您就不需要隐藏输入,也不需要刷新页面来设置 sessionScope。
我有一个列表框,其中填充了客户端选项,我需要将此列表框中的值存储到 sessionScope。
这是我的列表框
<xp:listBox id="listBox1"></xp:listBox>
这是我用来填充列表框的jquery
$("[id$='listBox1']").append("<option value='"+ ret + "'>" + ret + "</option>")
这是我必须将列表框保存到 sessionScope 中的按钮
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:sessionScope.pending = getComponent("listBox1").getValue()}]]></xp:this.action>
</xp:eventHandler></xp:button>
出于某种原因,列表框值未保存到我的 sessionScope 中。如果我在 DDE 中预先填充列表框,它可以工作,但这不是我想要的。
- 我也尝试过将 listBox 绑定到数据源,但没有成功
- 我也尝试过 select 单击按钮之前的值
如何将客户端填充到我的 sessionScope 中的值获取。
要粘贴到新 Xpage 的完整代码,(您需要 jquery 或 bootstrap 主题)
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="d" formName="Main"></xp:dominoDocument>
</xp:this.data>
<xp:button value="ADD TO LISTBOX" id="button2">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[var ret = "Testin"
$("[id$='listBox1']").append("<option value='"+ ret + "'>" + ret + "</option>")]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<xp:listBox id="listBox1" value="#{sessionScope.pending}">
<xp:eventHandler event="onchange" submit="true" refreshMode="complete"></xp:eventHandler>
</xp:listBox>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="save" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:sessionScope.pending = getComponent("listBox1").getValue()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:text escape="true" id="computedField1" value="#{sessionScope.pending}"></xp:text>
</xp:view>
这项工作按设计进行:
<xp:listBox
id="listBox1"
value="#{sessionScope.pending}">
<xp:selectItem itemLabel="A"></xp:selectItem>
<xp:selectItem itemLabel="B"></xp:selectItem>
</xp:listBox>
<xp:button
value="OK"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete">
</xp:eventHandler>
</xp:button>
我知道,它不会用 JQuery 填充值,但应该没什么区别...
免责声明:模型更新可能存在问题 - 如果组件提交的值不是通过源定义的 - <xp:selectItem>
。这通常发生在组合框上 - 提交的值必须与 XPage 生成的任何值相匹配。
我想可以选择在本机预填充列表框选项。如果没有,请尝试解决方法:
您可以使用 CSJS 将选定的值放入绑定到 sessionScope 的隐藏输入中。那一个将被提交。请注意,绑定已从 listBox1
移至 inputHiden1
。
<xp:button
value="Refresh"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="inputHidden1">
<xp:this.script><![CDATA[var lb = dojo.byId("#{id:listBox1}");
var hi = dojo.byId("#{id:inputHidden1}");
hi.value = lb.options[lb.selectedIndex].innerHTML;]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<xp:inputHidden
id="inputHidden1"
value="#{sessionScope.pending}">
</xp:inputHidden>
将值从列表框复制到隐藏输入的脚本可以在列表框的 onChange 中 运行 以避免单击按钮的需要。
另请参阅:XPages - Client side code to set viewScope value?
这可以通过简单的 RPC 调用来完成。
在你的页面中添加一个RPC,在这个例子中我会考虑
myRPC
作为服务名称。为此 RPC 定义一个函数,将值数组作为输入。该函数只是将此数组设置在 sessionScope 变量中。在这个例子中,我将函数命名为
setScopeVariable
;在为您的列表框构建值的客户端代码之后,只需调用此 RPC 函数。这里
listBoxValues
是一个包含值列表的数组: myRPC.setScopeVariable(listBoxValues);sessionScope 现在设置为正确的值。
这样您就不需要隐藏输入,也不需要刷新页面来设置 sessionScope。