我在 XPages 中使用扩展库中的名称选择器,并将结果放入多行编辑框中。
如何将编辑框设为只读,以便最终用户无法编辑选定的名称,除非使用名称选择器?
我尝试设置只读属性,但这也隐藏了控件。
我还尝试将结果放入隐藏字段,然后使用换行符作为分隔符在计算字段中显示结果,但是使目标控件不可见也会使控件不可见。
我在 XPages 中使用扩展库中的名称选择器,并将结果放入多行编辑框中。
如何将编辑框设为只读,以便最终用户无法编辑选定的名称,除非使用名称选择器?
我尝试设置只读属性,但这也隐藏了控件。
我还尝试将结果放入隐藏字段,然后使用换行符作为分隔符在计算字段中显示结果,但是使目标控件不可见也会使控件不可见。
您可以将 namePicker 与扩展库中的 djextNameTextBox 控件结合使用。这个控件只允许用户删除一个名字(而不是编辑它)。
<xe:djextNameTextBox id="testField" value="#{document.TestField}"></xe:djextNameTextBox>
<xe:namePicker id="namePicker1" for="testField" dialogTitle="Pick a name">
<xe:this.dataProvider>
<xe:dominoNABNamePicker addressBookSel="all-public" nameList="people"></xe:dominoNABNamePicker>
</xe:this.dataProvider>
</xe:namePicker>
我了解您是否想使用编辑框而不是 djextNameTextBox 因为它的外观。如果是这种情况,那么一点点自定义 CSS 可能会对您有所帮助 :-)
使用 maxlength 属性。这将阻止人们直接在该字段中输入
<xp:inputText id="inputText1"
value="#{viewScope.adminOwner_Tx}" maxlength="0"
style="width:300px">
</xp:inputText>
感谢您的回复。我在这里和 XPages Lotus 论坛中使用了一些响应。
添加一个我称为 ApproversDisplay 的多行文本框,将其设置为只读并且不要将其绑定到数据对象和默认值
var Rel = getComponent('Approvers').getValue();
return @Implode(Rel,"\n")
它用新行分隔每个值。
我对 XPages 很陌生,所以有些人可能会认为有更好的方法,但经过比我真正想要的时间更长的时间!它有效!
我使用使用隐藏字段<xp:hidden>
和计算字段的解决方法。我在我的博客http://naveegator.blogspot.com/2012/06/displaying-common-names-of-user-with.html上对此进行了描述。
下面是代码片段:
<?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">
<xe:namePicker id="npUserNames" for="hdnUserNames">
<xe:this.dataProvider>
<xe:dominoNABNamePicker addressBookDb="names.nsf"></xe:dominoNABNamePicker>
</xe:this.dataProvider>
</xe:namePicker>
<xp:inputHidden id="hdnUserNames" multipleTrim="true">
<xp:this.multipleSeparator><![CDATA[#{javascript:","}]]></xp:this.multipleSeparator>
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="cfUserNames"></xp:eventHandler>
</xp:inputHidden>
<xp:text escape="true" id="cfUserNames">
<xp:this.value><![CDATA[#{javascript:@Name("[CN]", getComponent("hdnUserNames").getValue())}]]></xp:this.value>
</xp:text>
</xp:view>
您还可以在“未提交 Xpage 中的只读字段”这个问题中查看 Sven 的回答,了解如何制作只读字段。
对于这些情况,我倾向于使用一种解决方法,类似于 Bill F 和 Naveen(但可能更干净一些):
将您的选择器目标字段包含在一个 div 中,并通过应用“display:none”作为样式来隐藏它。这样,它会呈现在页面上,使其可访问,但不可见。
为了显示选择器对此字段所做的任何更改,我添加了一个 onchange 事件来刷新包含计算字段的面板。此外,您可以根据需要设置计算字段中名称的显示样式(代码中有两个示例)。
<xp:div style="display:none;">
<xp:inputText id="yourfield" value="#{yourdocument.yourfield}" multipleSeparator=";">
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="surroundingpanel"></xp:eventHandler>
</xp:inputText>
</xp:div>
<xp:panel id="surroundingpanel">
<!-- displaying names abbreviated, separated by default multi-separator , -->
<xp:text escape="true" id="computedFieldExample1" value="#{yourdocument.yourfield}">
<xp:this.converter> <!-- converter is optional -->
<xp:customConverter>
<xp:this.getAsString><![CDATA[#{javascript:@Name("[ABBREVIATE]", value)}]]></xp:this.getAsString>
<xp:this.getAsObject><![CDATA[#{javascript:@Name("[CANONICALIZE]", value)}]]></xp:this.getAsObject>
</xp:customConverter>
</xp:this.converter>
</xp:text>
<!-- displaying names abbreviated one below each other -->
<xp:text escape="false" id="computedFieldExample2">
<xp:this.value><![CDATA[#{javascript:@Implode(@Name("[ABBREVIATE]", yourdocument.getItemValue("yourfield")), "<br />")}]]></xp:this.value>
</xp:text>
<xe:namePicker id="namepicker1" for="yourfield">
<xe:this.dataProvider>
<xe:dominoNABNamePicker nameList="peopleByLastName"></xe:dominoNABNamePicker>
</xe:this.dataProvider>
</xe:namePicker>
</xp:panel>