2009-05-20 4 views
8

मेरे पास एक आईसीएल मॉडिफायर वाला टेबलवीयर है जो ठीक काम करता प्रतीत होता है। मैंने सेल संपादकों में से एक पर एक आईसीएलएडिटर वैलिडेटेटर सेट किया है, और मैं इसे जिस तरह से पसंद करूंगा उससे व्यवहार नहीं कर सकता। यहां मेरा संक्षिप्त कोड दिया गया है:मुझे ICellEditorValidator द्वारा पता लगाई गई सत्यापन त्रुटि को कैसे प्रदर्शित करना चाहिए?

cellEditors[1] = new TextCellEditor(table); 
cellEditors[1].setValidator(new ICellEditorValidator() { 
    public String isValid(Object value) { 
     try { 
      Integer.parseInt((String) value); 
      return null; 
     } catch(NumberFormatException e) { 
      return "Not a valid integer"; 
     } 
    } 
}); 

यह ज्यादातर ठीक काम करता है।

  1. सेल संशोधक की modify विधि सत्यापनकर्ता एक त्रुटि देता है, तो नया मूल्य के रूप में एक अशक्त प्राप्त करता है: लेकिन, इसमें दो मुद्दे हैं। मैं इसे नियंत्रित करने के लिए कोड कर सकता हूं, लेकिन यह सही प्रतीत नहीं होता है। शून्य मान्य मान हो सकता है, उदाहरण के लिए, यदि उपयोगकर्ता पृष्ठभूमि रंग चुन रहा है और उन्होंने पारदर्शी चुना है। (यह एक सामान्य मुद्दा है, जो इस उदाहरण के लिए विशिष्ट नहीं है।)
  2. सत्यापनकर्ता का त्रुटि संदेश उपयोगकर्ता को कभी प्रदर्शित नहीं किया गया है। यह बड़ी समस्या है। अंतिम मान अमान्य था, तो मैं भी एक आईसीएलएडिटर लिस्टर और applyEditorValue विधि से एक संवाद प्रदर्शित कर सकता हूं। क्या यह ऐसा करने के लिए "उचित" तरीका है?

वैसे, मेरे नियंत्रण से परे कारणों से, मैं ग्रहण 3.0 ढांचे तक सीमित हूं।

उत्तर

9

आप अपने संपादक के लिए एक श्रोता जोड़ सकते हैं:

cellEditors[1].addListener(
     public void applyEditorValue() {      
      page.setErrorMessage(null); 
     } 

     public void cancelEditor() { 
      page.setErrorMessage(null);     
     } 

     public void editorValueChanged(boolean oldValidState, 
       boolean newValidState) {      
      page.setErrorMessage(editor.getErrorMessage());         
     } 

अपने वर्तमान FormPage जा रहा है पेज, यह उपयोगकर्ता errorMessage प्रदर्शित करेगा।

5

दूसरी समस्या के संबंध में, सत्यापनकर्ता की विधि isValid रिटर्न स्ट्रिंग CellEditor के लिए उस सत्यापनकर्ता का स्वामित्व त्रुटि संदेश बन जाती है। आप उस संदेश को CellEditor.getErrorMessage से पुनर्प्राप्त कर सकते हैं।

ऐसा लगता है कि त्रुटि संदेश दिखाने का सबसे आसान तरीका ICellEditorListener के माध्यम से है, जैसा कि उपरोक्त सुझाव देता है। हो सकता है कि इस श्रोता के बारे में मुश्किल बात यह है कि सेल संपादक को किसी भी तरीके से पैरामीटर के रूप में पारित नहीं किया गया है, इसलिए धारणा यह है कि श्रोता यह जानता है कि कौन सा सेल संपादक उससे बात कर रहा है।

यदि आप संवाद चाहते हैं, तो वरीयता पृष्ठ या ICellEditorListener इंटरफ़ेस को लागू करने के लिए जो भी ऑब्जेक्ट आपको यह सुनिश्चित करना होगा कि यह सेल संपादक संपादित किया जा रहा है।

हालांकि, यदि यह सेल संपादक स्वयं इंटरफ़ेस लागू करता है तो उसे संवाद संदेश, वरीयता पृष्ठ या जो भी हो, त्रुटि संदेश को सही तरीके से ले जाने का एक तरीका होना चाहिए। यह currentForm page स्कॉट की तलाश है। यदि आप EditingSupport उपयोग कर रहे हैं देख लायक

एक आखिरी बात यह है कि EditingSupport.setValue विधि में पारित मान शून्य है जब ICellEditorValidator.isValue एक त्रुटि संदेश देता है। इसे जांचना न भूलें।

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