2013-02-14 22 views
2

我使用的名稱選擇器從擴展庫XPages中,我把結果放到一個多行編輯框。從名稱選擇器配售結果爲只讀控制

我怎樣才能讓編輯框是隻讀的,使最終用戶無法編輯,除了與名稱選擇器選擇的名字呢?

我嘗試設置只讀屬性,但它隱藏的控制爲好。

我還試圖把結果放到一個隱藏字段,然後使用換行作爲分隔符顯示在計算字段的結果,但使得目標控制不可見也使得控制不可見。

回答

1

我用的解決方法使用隱藏域<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」關於如何使只讀域。

4

您可以將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可以幫助你:-)

+0

我和Bill有同樣的問題。感謝您的提示 - 但不幸的是,點擊「確定」後名稱選擇器對話框不會關閉。我發現,名稱選擇器的行爲取決於顯示選定名稱的目標。有任何想法嗎? – 2014-01-28 10:49:30

1

感謝您的回覆。我在這裏和XPages Lotus論壇中使用了一些響應。

  1. 我的審批控制
  2. 創建道場名稱選擇器,並指出它在所謂的審批文本控制,並設置MultipleSeparator爲「」添加多行文本框,我叫ApproversDisplay,設置此爲只讀,並且不將其綁定到該數據對象和其分離用一個新行的每個值的

    var Rel = getComponent('Approvers').getValue(); 
    return @Implode(Rel,"\n") 
    

    的默認值。

  3. 的審批控制上做ApproverDisplay局部刷新設置onchange事件。
  4. 在源代碼中我設置了樣式屬性display:none這不會隱藏名稱選擇器,就像visible屬性一樣。

我對XPages很新穎,所以有人可能會認爲有更好的辦法,但經過更多的時間後,我真的很想數!它工作!

+0

我剛用這個方法來解決類似的問題。 – 2013-12-09 14:43:58

2

使用maxlength屬性。這將阻止人們打字到現場直接

<xp:inputText id="inputText1" 
value="#{viewScope.adminOwner_Tx}" maxlength="0" 
style="width:300px"> 
</xp:inputText> 
1

用於這些情況下,我傾向於使用,類似於比爾˚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>