2012-07-25 15 views
8

के साथ काम नहीं करता है मैं जेएसएफ 2.0, जेबॉस 7.1.1 फ़ाइनल के साथ काम कर रहा हूं और मुझे selectOneMenu के साथ निम्नलिखित समस्या है। मैं एक प्रबंधित बीन में एक फ़ील्ड को सही/गलत/शून्य में सेट करने में सक्षम होना चाहता हूं। इस प्रकार, मैं selectOneMenu निम्नलिखित बनाया है:एच: बूलियन आइटम के साथ selectOneMenu शून्य मूल्य

<h:selectOneMenu value="#{personList.criteria.registrationComplete}" > 
    <f:selectItem itemValue="#{null}" itemLabel="Any.." /> 
    <f:selectItem itemValue="true" itemLabel="Yes"/> 
    <f:selectItem itemValue="false" itemLabel="No"/> 
</h:selectOneMenu> 

अब, अगर मैं करने के लिए 'किसी भी ..', यह registrationComplete क्षेत्र "गलत" पर प्रदान करेंगे (जो बूलियन है) का चयन करें। तो शून्य को झूठी के रूप में व्याख्या किया गया है। मैं भी selectItem (रों) में बूलियन मूल्यों का उपयोग करने की कोशिश की, वह यह है कि:

<h:selectOneMenu value="#{personList.criteria.registrationComplete}" > 
    <f:selectItem itemValue="#{null}" itemLabel="Any.." /> 
    <f:selectItem itemValue="#{true}" itemLabel="Yes"/> 
    <f:selectItem itemValue="#{false}" itemLabel="No"/> 
</h:selectOneMenu> 

और इस प्रकार मैं भी चेहरे-config में कनवर्टर पंजीकृत:

<converter> 
    <converter-id>booleanConverter</converter-id> 
    <converter-class>javax.faces.convert.BooleanConverter</converter-class> 
</converter> 

और इसका इस्तेमाल करने की कोशिश की:

<h:selectOneMenu value="#{personList.criteria.registrationComplete}" > 
    <f:selectItem itemValue="#{null}" itemLabel="Any.." /> 
    <f:selectItem itemValue="true" itemLabel="Yes"/> 
    <f:selectItem itemValue="false" itemLabel="No"/> 
     <f:converter converterId="booleanConverter"/> 
</h:selectOneMenu> 

लेकिन इन सभी प्रयासों के परिणामस्वरूप एक ही व्यवहार - जब शून्य मान का चयन किया गया था, तो इसे गलत के रूप में व्याख्या किया गया था।

मैंने इसे डीबग किया और स्टैक ट्रेस में मुझे वह स्थान मिला जहां यह होता है। AstValue.setValue(EvaluationContext, Object) line: 204

में यह कहता है

ELSupport.coerceToType(value, targetClass) 

मूल्य पैरामीटर रिक्त है और targetClass बूलियन है। यह coorToType विधि तब गलत लौटाता है।

कोई भी विचार इस मुद्दे को हल करने के लिए कैसे करें? धन्यवाद!

+0

setRegistrationComplete() विधि के हस्ताक्षर क्या है? तर्क का प्रकार क्या है? बूलियन या बूलियन? – prageeth

+0

@prageeth: ओपी स्पष्ट रूप से 'बूलियन' कहा। – BalusC

+0

@prageeth यह सार्वजनिक शून्य सेट पंजीकरण प्रमाणीकरण (बूलियन पंजीकरण पूर्ण)। और क्षेत्र पंजीकरण पूर्ण है बूलियन – lukas

उत्तर

8

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

आप अपने सर्वर स्टार्टअप स्क्रिप्ट के लिए निम्न वीएम तर्क जोड़कर इस अपाचे ईएल पार्सर व्यवहार को बंद कर सकते हैं:

-Dorg.apache.el.parser.COERCE_TO_ZERO=false 
संबंधित मुद्दे