以下是我打算在xpages中做的事情。
当我在编辑框中输入内容时,我单击按钮,组合框将显示相关信息。
这是xpage中的设计,有一个编辑框,一个按钮和一个组合框。编辑框使用会话范围变量,该按钮用于部分刷新组合框。组合框显示相关值取决于编辑框值。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:inputText id="inputText1" value="#{sessionScope.itemname}"></xp:inputText>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="comboBox1">
</xp:eventHandler></xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:comboBox id="comboBox1">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var SetFirstValueBlank = @Text("");
return SetFirstValueBlank;
}]]></xp:this.value>
</xp:selectItems>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var searchitem= getComponent("inputText1").getValue();
var result = @DbLookup(@DbName(),"itemListView", searchitem,1 );
return result;}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox>
</xp:view>
假设在视图中,它有许多项目,如苹果,苹果片,苹果汁,苹果派,鱼,橙等。
当我运行程序时,我准确地输入苹果派,组合框可以显示确切的值(苹果派)供我选择,但是如果我只输入appl(不是确切的值),组合框就不会什么都有。事实上,我认为组合框会显示苹果,苹果片,苹果汁和苹果派供我选择,但结果让我知道我错了。
我修改了代码,我猜组合框没有返回任何选项,因为我使用@DbLookup,所以@DbLookup需要确切的值,所以组合框不会显示任何内容。
我选择使用组合框的原因是它允许用户只选择一个值。
我想@DbColumn但它会返回视图列中的所有值,所以我使用@DbLookup,但它需要确切的值才能查找。
如何让组合框返回相关信息取决于编辑框的值。
请感谢您的建议。谢谢。
答案 0 :(得分:1)
使用设置为exact
的参数false
的视图getAllEntriesByKey()来获取以给定密钥开头的所有条目(在您的示例中为“apple”)。
答案 1 :(得分:1)
而不是使用inputText + combo,您是否考虑使用在一个控件中提供此类行为的控件?
如果您能够使用扩展库,则可以使用dojo filteringselect控件或dojo组合框控件。
两者彼此相似但是对于dojo过滤选择,您必须从给定的选择列表中选择一个值。对于dojo组合框,即使它不在列表中,你也可以输入任何单词
这是Brad Balassaitis博客的一个例子 https://www.google.com.au/amp/s/xcellerant.net/2013/09/18/xpages-dojo-filtering-select/amp/?client=safari
默认情况下,条目与'starts with'样式匹配,因此'pie'与'apple pie'不匹配,但'app'会匹配。
如果你想过滤select以匹配单词的任何部分,那么你将queryExpr设置如下
<xe:djFilteringSelect id="djFilteringSelect1" value="#{viewScope.myvalue}" autoComplete="false">
<xe:this.queryExpr><![CDATA[${javascript:"*$\{0}*"}]]></xe:this.queryExpr>
<xp:selectItems id="selectItems1" value="#{myBean.mySelectItems}"/>
</xe:djFilteringSelect>