2011-07-24 27 views
7

से चेकबॉक्स के मान कैसे सेट/प्राप्त करें यह एक तर्कसंगत प्रश्न है। मेरे पास वेबपृष्ठ पर एक चेकबॉक्स है और मैं अपने मूल्य को बूलेन ऑब्जेक्ट (जावा) में सर्वलेट अनुरोध पैरामीटर से संग्रहीत करता हूं। तर्क यह है कि, यदि चेकबॉक्स के लिए अनुरोध पैरामीटर शून्य नहीं है, तो ऑब्जेक्ट को सही बनाएं, अन्यथा यह शून्य है। जब पृष्ठ को फिर से कॉल किया जाता है, तो यह चेकबॉक्स को "चेक किया गया" के रूप में चिह्नित करता है यदि उसका संग्रहीत मान सत्य है।गतिशील रूप से

this.checkbox = (servlet.getParameter("checkbox")!=null && servlet.getParameter("checkbox").contentEquals("on"))?true:null; 

समस्या तब शुरू होती है जब मैं उस चेकबॉक्स ऑब्जेक्ट को जारी रखता हूं। मैं पहले पृष्ठ को लगातार डेटा के साथ पॉप्युलेट करता हूं और फिर इसे सर्वलेट मानों से भरता हूं। यदि चेकबॉक्स मान डेटाबेस में सत्य के रूप में संग्रहीत किया जाता है, और उपयोगकर्ता इसे पृष्ठ पर अनचेक करता है और इसे सबमिट करता है, क्योंकि चेकबॉक्स के लिए सर्वलेट पैरामीटर शून्य हो जाता है, तो मैं चेकबॉक्स को शून्य बनाने में असमर्थ हूं। तो चेकबॉक्स हमेशा लगातार मूल्य दिखाता है क्योंकि इसे कभी ओवरराइट नहीं किया जाता है। तो क्या कोई ऑब्जेक्ट वैल्यू भरने में कुछ तर्क परिवर्तन सुझा सकता है?

+2

एक बूलियन चर सत्य या गलत होना चाहिए, सत्य या शून्य नहीं होना चाहिए। –

उत्तर

17

चेकबॉक्स के लिए एकमात्र वैध परीक्षण यह देखना है कि getParameter()null लौटाता है या नहीं।

यदि वापसी मूल्य null है तो यह अनचेक किया गया है, अन्यथा यह चेक किया गया है।

नोट, checked विशेषता मौजूद होना चाहिए यदि आप चाहते हैं कि पहले पृष्ठ प्रस्तुति पर चेकबॉक्स चेक किया जाए और यदि आप इसे अनचेक करना चाहते हैं तो बिल्कुल उपस्थित नहीं होना चाहिए। नीचे दिए गए उदाहरण में पैरामीटर मान हमेशा checked होना चाहिए।

<label> 
    <input 
    type="checkbox" 
    id="cb_id" 
    name="cb_id" 
    value="cb_id_value" 
    checked="checked" 
    /> 
    My label 
</label> 

इस उदाहरण के लिए, यदि आप अपने सर्वलेट प्रसंस्करण कोड में इस तर्क हो सकता है:

HTTPServetRequest request = ...; 

boolean cbState = request.getParameter("cb_id") != null; 

ध्यान दें, कि यदि चेकबॉक्स ऊपर के उदाहरण में उपयोगकर्ता द्वारा जाँच की है getParameter"cb_id_value" वापस आ जाएगी, लेकिन क्योंकि आपके पास आमतौर पर एक समर्पित नाम वाला एक चेकबॉक्स होता है जिसे आपको मूल्य की जांच करने की आवश्यकता नहीं होती है।

बीटीडब्ल्यू, मैंने आपके उदाहरण में देखा है कि आप servlet से getParameter का उपयोग कर रहे हैं। मुझे आशा है कि आपके सिस्टम में यह HTTPServletRequest के लिए एक मोनिकर है।

+0

क्या आप नाम या आईडी द्वारा पैरामीटर पुनर्प्राप्त करते हैं? साथ ही, 'request.get पैरामीटर वैल्यूज (..)' 'का उपयोग करना क्यों संभव नहीं है? –

0

ऐसा लगता है कि आप चेकबॉक्स फ़ील्ड के बदले हुए मूल्य को जारी नहीं रख सकते हैं, या आपको शून्य मानों के संचालन में कुछ भ्रम हो गया है जिससे क्षेत्र हमेशा जांच के रूप में दिखाया जा सकता है।

यह सुनिश्चित करने का प्रयास करें कि आपके डेटाबेस फ़ील्ड में हमेशा एक वैध बूलियन होता है, फ़ील्ड को नल की अनुमति न दें और उचित डिफ़ॉल्ट मान न हो।

फॉर्म जमा करने पर, आपको चेकबॉक्स चेक किया गया है और false अन्यथा डेटाबेस मान को true पर अपडेट करना चाहिए।

फ़ॉर्म दिखाने पर आपको केवल "चेक" विशेषता को टैग में शामिल करना चाहिए यदि डेटाबेस मान true है।

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