2013-10-19 5 views
6

मैं इस कोड है:प्रकार बेमेल जब XPages साथ जावा बीन के लिए बहु-मान फ़ील्ड जुड़ने की कोशिश कर

<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 मेरे बीन से बंधे हैं।

इस जावा कोड का उपयोग करना -

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); 
    } 
} 

यह अनेक मान के लिए ठीक काम करने के लिए प्रकट होता है। लेकिन अगर केवल एक ही वैल्यू का उपयोग किया जाता है तो मुझे एक त्रुटि मिलती है: java.lang.IllegalArgumentException: तर्क प्रकार मिस्चैच

मुझे लगता है कि इसे एकाधिक मानों के लिए एक ऐरे लौटने वाले XPages और एकल मानों के लिए स्ट्रिंग के साथ करना है। लेकिन मुझे यकीन नहीं है कि यह काम कैसे करें।

किसी भी सलाह की सराहना की जाएगी! धन्यवाद!!

--UPDATE - कैमक से जुड़े ब्लॉगपॉस्ट से यह कोड काम करने लगता है।

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 बीन विधि अधिभार को समझ में नहीं आता है और हमेशा सूची तर्क के साथ एक को चुनता है। कैमैक का जवाब समाधान है। अच्छा होगा अगर XPage हमेशा स्ट्रिंग या सूची लौटाता है ... –

+2

@PanuHararamo: यह एक जेएसएफ विशिष्ट मुद्दा है। केवल पहला सार्वजनिक सेटटर उपयोग किया जाता है क्योंकि ईएल * कक्षा * को कॉल करके एक विधि हल करता है। * getMethods() * और खोजे गए नाम से मिली पहली सार्वजनिक विधि का उपयोग करता है। एक अन्य दृष्टिकोण एक वस्तु को संभालने के साथ एक सार्वजनिक विधि है और निजी सेटर कहते हैं। फिर उम्मीद के रूप में काम overloading। –

+0

इस xpages स्थिति कितना परेशान है! आपने मेरा दिन बचाया, धन्यवाद। एक और जवाब जो मैं विचार कर रहा था (लेकिन लागू नहीं हुआ) किसी भी तरह से सबमिट स्ट्रिंग के अंत में हमेशा एक खाली मूल्य जोड़ना था, ताकि यह हमेशा एक सरणी हो। तो अपने कोड रिक्त स्थान को अनदेखा करें। हालांकि कोशिश नहीं की है। – user2808054

उत्तर

7

मैं एक ही समस्या हो रही है और इस लिंक से युक्तियों का उपयोग याद में मदद मिली: http://dontpanic82.blogspot.com.au/2012/06/multi-value-fields-and-beans-in-xpages.html

शायद बजाय 2 अलग लोगों के होने का, जनता गेटर और सेटर java.lang.Object का उपयोग होने की कोशिश?

+0

धन्यवाद ऐसा लगता है कि चाल चल रही है! मैं इसकी प्रशंसा करता हूँ! –

संबंधित मुद्दे