我使用的名稱選擇器從擴展庫XPages中,我把結果放到一個多行編輯框。從名稱選擇器配售結果爲只讀控制
我怎樣才能讓編輯框是隻讀的,使最終用戶無法編輯,除了與名稱選擇器選擇的名字呢?
我嘗試設置只讀屬性,但它隱藏的控制爲好。
我還試圖把結果放到一個隱藏字段,然後使用換行作爲分隔符顯示在計算字段的結果,但使得目標控制不可見也使得控制不可見。
我使用的名稱選擇器從擴展庫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>
你也可以看看埃裏克森的回答這個問題:「ReadOnly field in Xpage not submitted」關於如何使只讀域。
您可以將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可以幫助你:-)
感謝您的回覆。我在這裏和XPages Lotus論壇中使用了一些響應。
創建道場名稱選擇器,並指出它在所謂的審批文本控制,並設置MultipleSeparator爲「」添加多行文本框,我叫ApproversDisplay,設置此爲只讀,並且不將其綁定到該數據對象和其分離用一個新行的每個值的
var Rel = getComponent('Approvers').getValue();
return @Implode(Rel,"\n")
的默認值。
我對XPages很新穎,所以有人可能會認爲有更好的辦法,但經過更多的時間後,我真的很想數!它工作!
我剛用這個方法來解決類似的問題。 – 2013-12-09 14:43:58
使用maxlength屬性。這將阻止人們打字到現場直接
<xp:inputText id="inputText1"
value="#{viewScope.adminOwner_Tx}" maxlength="0"
style="width:300px">
</xp:inputText>
用於這些情況下,我傾向於使用,類似於比爾˚F&納文(但也許更多一點清理)解決方法:
附上你的選擇器目標字段一個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>
我和Bill有同樣的問題。感謝您的提示 - 但不幸的是,點擊「確定」後名稱選擇器對話框不會關閉。我發現,名稱選擇器的行爲取決於顯示選定名稱的目標。有任何想法嗎? – 2014-01-28 10:49:30