如何让XPages中的字段成为Names普通字段?

时间:2013-10-11 11:36:15

标签: xpages lotus-notes lotus-domino lotus

我想在XPages中创建一个新字段来执行与表单中的Names字段相同的操作。 TY

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

您可以使用此简单的SSJS代码段在文档中创建名称字段。

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

答案 2 :(得分:1)

如何使用java bean背景? 创建一个名为NameConverter的java bean ...

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>

简单如地狱且完全可扩展。 享受,JiKra

答案 3 :(得分:0)

自定义转换器是最佳解决方案: getAsObject:@Name(“[Canonicalize]”,@ Explode(value)) - 保存的值 getAsString:@Implode(@Name(“[Abbreviate]”,value),“,”) - 网络中的值