2013-10-11 30 views
1

我想在XPages中創建一個新字段,以完成像表單中名稱字段一樣的操作。 TY如何讓XPages中的字段像名稱普通字段一樣?

+0

您需要使用轉換器以縮略格式顯示值。谷歌的例子。 –

+2

迄今爲止4個很好的答案。一些澄清:你的名字必須是名稱字段?因爲那麼一些答案是不能使用的 –

+0

是的,它必須是一個名字類型字段來完成名稱字段在正常情況下「打開namesnsf以選擇它們」的功能,就像電子郵件一樣。我是這個東西的小菜一碟! – MihaiRO

回答

1

您可以使用這個簡單的SSJS代碼片段在文檔中創建名稱字段。

var n:NotesItem = doc.replaceItemValue("Field1", "Value1"); 
n.setNames(true); 
2

使用擴展庫的名稱選擇器和DOJO表單控件的名稱文本框。 名稱選取器從目錄抓取,名稱字段顯示名稱。

這裏是一個例子。

<xe:namePicker id="namePicker1" 
for="djextNameTextBox1"> 
<xe:this.dataProvider> 
<xe:dominoNABNamePicker groups="false" 
    nameList="peopleByLastName"> 
</xe:dominoNABNamePicker> 
</xe:this.dataProvider> 
</xe:namePicker> 
     <xe:djextNameTextBox id="djextNameTextBox1" 
      value="#{document1.<FIELDNAME>}"> 
     </xe:djextNameTextBox> 
0

定製轉換器是最好的解決方案: 的getAsObject:@Name( 「[Cannonicalize]」,@爆炸(vlaue)) - 保存的值 符getAsString:@Implode(@Name( 「[縮寫]」 ,value),「,」) - web中的值

1

如何使用java bean背景? 創建一個Java bean稱爲NameConverter ...

package converters; 

import java.util.ArrayList; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.convert.Converter; 
import lotus.domino.Name; 
import lotus.domino.NotesException; 
import com.ibm.xsp.model.domino.DominoUtils; 

public class NameConverter implements Converter { 

private Name createName(String name) { 
    Name n = null; 

    try { 
     n = DominoUtils.getCurrentSession().createName(name); 
    } catch (NotesException e) { 
     e.printStackTrace(); 
    } 

    return n; 
} 

public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    String[] names = value.split(","); 
    Name name = null; 
    ArrayList<String> tmpNames = new ArrayList<String>(); 

    for (int i = 0; i <= names.length - 1; i++) { 
     name = this.createName(names[i].trim()); 

     try { 
      tmpNames.add(name.getAbbreviated()); 
     } catch (NotesException e) { 
      e.printStackTrace(); 
     } 
    } 

    return tmpNames.toString().replace("[", "").replace("]", ""); 
} 

public String getAsString(FacesContext context, UIComponent component, Object value) { 
    String[] names = value.toString().split(","); 
    Name name = null; 
    ArrayList<String> tmpNames = new ArrayList<String>(); 

    for (int i = 0; i <= names.length - 1; i++) { 
     name = this.createName(names[i].trim()); 

     try { 
      tmpNames.add(name.getAbbreviated()); 
     } catch (NotesException e) { 
      e.printStackTrace(); 
     } 
    } 

    return tmpNames.toString().replace("[", "").replace("]", ""); 
} 
} 

註冊您的轉換器faces-config.xml中......

<converter> 
    <converter-id>nameConverter</converter-id> 
    <converter-class>converters.NameConverter</converter-class> 
</converter> 

,然後創建一個字段與您的XPage一個簡單的轉換.. 。

<xp:inputText id="userName" style="width:300px"> 
    <xp:this.converter> 
     <xp:converter converterId="nameConverter" /> 
    </xp:this.converter> 
</xp:inputText> 

簡單的地獄和完美的可擴展性。 Enjoy,JiKra

+0

你的方法有什麼優點? –

+1

更好的可擴展性和業務邏輯和視圖的分離。 如果他需要一個選擇列表來抓取NAB中的姓名,那麼您的解決方案會更好,但是如果他只需要姓名字段的行爲(將姓名翻譯爲簡寫形式),那麼我的解決方案就足夠了。 – JiKra

相關問題