2013-10-11 3 views
1

양식의 이름 필드와 같은 작업을 수행하기 위해 XPage에서 새 필드를 만들고 싶습니다. TYXPages의 필드를 Names 일반 필드와 같이 만들려면 어떻게해야합니까?

+0

값을 축약 된 형식으로 표시하려면 변환기를 사용해야합니다. 예를 들면 Google. –

+2

지금까지 4 개의 큰 해답이 있습니다. 몇 가지 설명 : 이름이 이름 필드 여야합니까? 왜냐하면 어떤 대답은 사용할 수 없기 때문입니다. –

+0

예, 전자 메일처럼 "namesnsf를 열어 열기"라는 이름의 필드에서 이름 필드가하는 일을 정확하게 수행하기 위해서는 Names 형식 필드 여야합니다. 나는이 일에 멍청하다! – MihaiRO

답변

1

이 간단한 SSJS 코드 스 니펫을 사용하여 문서에 이름 필드를 만들 수 있습니다.

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

확장 라이브러리의 이름 선택기와 DOJO 양식 컨트롤의 이름 텍스트 상자를 사용하십시오. 이름 선택 도구가 디렉토리에서 가져오고 이름 필드에 이름이 표시됩니다.

다음은 예입니다. @Implode (@Name는 ("[축약]": - : getAsObject가 : 저장된 값 getAsString이 @Name는 ("[Cannonicalize]"@ 폭발 (vlaue가))

<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

사용자 정의 컨버터는 가장 좋은 방법입니다 , 값), ",") - 웹 값

1

자바 빈 배경은 어떻습니까? ...

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("]", ""); 
} 
} 

가 얼굴-config.xml 파일에 변환기를 등록 ...

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

을 NameConverter라는 자바 빈을 생성 한 다음 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