2013-10-19 1 views
6

이 코드를 가지고 :형식 불일치는

<xe:formTable id="formTable1" formTitle="User Roles"> 
    <xe:formRow id="formRow1" label="Category Admin"> 
     <xe:djextNameTextBox id="edtCatAdmin" multipleSeparator="," value="#{exhibitorInfo.categoryAdmin}" /> 
     <xe:namePicker id="namePicker1" for="edtCatAdmin"> 
      <xe:this.dataProvider> 
       <xe:namePickerAggregator> 
        <xe:this.dataProviders> 
         <xe:dominoNABNamePicker addressBookSel="first" groups="false" people="true" /> 
         <xe:dominoViewNamePicker labelColumn="mailinName" viewName="lkp_MailIn" label="Group Mailboxes" /> 
        </xe:this.dataProviders> 
       </xe:namePickerAggregator> 
      </xe:this.dataProvider> 
     </xe:namePicker> 
    </xe:formRow> 
</xe:formTable> 

목표는 다중 값 이름 선택기는 오히려 자바 빈에 valies있어 저장하는 것입니다 다음 문서 필드. 따라서 이름 선택기는 이름을 쉽게 제거 할 수 있도록 xe : djextNameTextBox를 가리키고 xe : djextNameTextBox는 내 bean에 바인딩됩니다. 이 자바 코드를 사용하여

은 -

public void setCategoryAdmin(ArrayList<String> categoryAdmin) { 
    System.out.println("Set CategoryAdmin - List"); 
    this.categoryAdmin = categoryAdmin; 
} 


public void setCategoryAdmin(String categoryAdmin) { 
    System.out.println("Set CategoryAdmin - String"); 
    if (!this.isBlankString(categoryAdmin)) { 
     ArrayList<String> al = new ArrayList<String>(); 
     al.add(categoryAdmin); 
     this.setCategoryAdmin(al); 
    } 
} 

은 여러 값에 대한 잘 작동이 나타납니다. 하지만 하나의 valule 만 사용되면 오류가 발생합니다. java.lang.IllegalArgumentException : 인수 유형이 일치하지 않습니다.

나는 이것이 다중 값의 배열과 단일 값의 문자열을 반환하는 XPage와 관련이 있다고 생각합니다. 하지만이 작업을 수행하는 방법을 잘 모르겠습니다.

조언을 보내 주시면 감사하겠습니다. 감사!!

- UPDATE-- Camac이 링크 된 blogpost에서이 코드가 작동하는 것처럼 보입니다. 저도 같은 문제가이 링크에서 팁을 사용하여 기억

public Object getCategoryAdmin() { 
    System.out.println("getCategoryAdmin"); 
    return this.categoryAdmin; 
} 


@SuppressWarnings("unchecked") 
public void setCategoryAdmin(Object inputMulti) { 
     this.categoryAdmin = this.translateToVector(inputMulti); 
    } 

@SuppressWarnings("unchecked") 
public Vector translateToVector(Object object){ 
if(object instanceof String){ 
    Vector list = new Vector(); 
    list.add(object); 
    return list; 
} 

if(object instanceof List){ 
    return (Vector)object; 
} 

return null; 
} 
+3

XPage는 bean 메소드 오버로딩을 이해하지 못하고 항상 list 인자를 가진 것을 선택합니다. 카막의 대답은 해결책입니다. XPage가 항상 String 또는 List를 반환하면 좋을 것입니다. –

+2

@PanuHaaramo : 이것은 JSF 특정 문제입니다. EL은 * Class *를 호출하여 메소드를 해석하므로 첫 번째 공용 설정자 만 사용됩니다. * getMethods() * 및 검색된 이름과 함께 발견 된 첫 번째 공용 메소드를 사용합니다. 또 다른 접근법은 Object를 처리하는 public 메소드를 가지고 private setter를 호출하는 것입니다. 그런 다음 과부하가 예상대로 작동합니다. –

+0

이 xpages 상황은 얼마나 성가신 일입니까! 너는 나의 하루를 구했다. 고마워. 고려중인 또 다른 대답은 (그러나 구현되지 않았습니다.) 항상 제출 된 문자열의 끝 부분에 공백 값을 추가하는 것이므로 항상 배열입니다. 코드에서 공백을 무시하게하십시오. 비록 그것을 시도하지 않았습니다. – user2808054

답변